-
Tensorflow - 딥러닝 모델과 퍼셉트론(보스턴 집값 예측)생활코딩/머신러닝야학 2020. 8. 17. 20:36
[강의 출처] opentutorials.org/module/4966/28976
대푯값
-평균값(Mean or Average): 일반적인 경우에 대푯값으로 많이 사용되는 값. 다만 평균 연봉처럼 이상치(outlier)에 영향을 많이 받는 데이터의 경우, 평균값이 대표성을 띠지 못할 수 있음
-중앙값(Median): 값들을 순서대로 정렬했을 때 중앙에 위치한 값
-최빈값(Mode): 값 중에서 가장 자주 등장하는 값
보스턴 집값 예측
행은 타운(Town), 열은 아래의 컬럼명과 같은 정보로 이루어진 데이터가 있다고 할 때, 1~13열의 정보를 통해 14열의 집값을 예측하는 공식을 알아내는 작업
아래 식에서 a~m에 해당하는 상관계수를 알아낸다면, 1~13열의 정보가 주어졌을 때 MEDV 값을 예측할 수 있음
MEDV(24) = CRIM(0.00632)*a + ZN(18)*b + INDUS(2.31)*c + CHAS(0)*d + NOX(0.538)*e + RM(6.575)*f + AGE(65.2)*g + DIS(4.09)*h + RAD(1)*i + TAX(296)*j + PTRATIO(15.3)*K + B(396.9)*l + LSTAT(4.98)*m
1 2 3 4 5 6 7 8 9 10 11 12 13 14 CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT MEDV 범죄율 강변 여부 평균 방 수 노후주택 비율 재산세 비율 학생/교사 비율 하위계층 비율 집값의 중앙값 0.00632 18 2.31 0 0.538 6.575 65.2 4.09 1 296 15.3 396.9 4.98 24 # 라이브러리 사용 import tensorflow as tf import pandas as pd # 1.과거의 데이터를 준비합니다. 파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv' 보스턴 = pd.read_csv(파일경로) print(보스턴.columns) # Index(['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat', 'medv'], dtype='object') # 이대로 아래에서 독립/종속변수 분리 보스턴.head() # 독립변수, 종속변수 분리 독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat']] 종속 = 보스턴[['medv']] print(독립.shape, 종속.shape) # shape가 안 맞으면 버그가 날 수 있으므로 꼭 확인해야함 # 2. 모델의 구조를 만듭니다 X = tf.keras.layers.Input(shape=[13]) # 독립변수가 13열. 13개의 입력층 구성 Y = tf.keras.layers.Dense(1)(X) # 종속변수는 1열. 출력층은 1개 model = tf.keras.models.Model(X, Y) model.compile(loss='mse') """ 13개의 입력층과 1개의 출력층은 아래 수식으로 구성 가능 y(출력층) = w1x1 + w2x2 + ... + w13x13 + b (입력층) 퍼셉트론(Perceptron): 위의 수식은 출력층이 하나인 퍼셉트론을 가리킴 가중치(Weight): w1 ~ w13 편향(bias): b """ # 3.데이터로 모델을 학습(FIT)합니다. model.fit(독립, 종속, epochs=1000, verbose=0) model.fit(독립, 종속, epochs=10) # loss가 매 학습마다 조금씩 줄어든다면 더 학습시킬 여력이 있는 상황이므로 추가 학습 진행해도 됨 # 4. 모델을 이용합니다 print(model.predict(독립[5:10])) # 6번째부터 11번째 열에 해당하는 데이터로 테스트 # 종속변수 확인 print(종속[5:10]) """ [[26.83134 ] [21.571602] [18.461823] [ 9.755964] [18.098982]] medv 5 28.7 6 22.9 7 27.1 8 16.5 9 18.9 근접한 정도 확인. 선형회귀에서 100% 일치는 사실상 어렵고, 차이를 줄이는 것이 목표 """ # 모델의 수식 확인 print(model.get_weights()) """ [array([[-0.08650918], [ 0.08076939], [-0.05519128], [ 3.3360822 ], [ 1.4669524 ], [ 3.7811213 ], [ 0.02130296], [-0.87434626], [ 0.14586656], [-0.0088202 ], [ 0.08197837], [ 0.01700737], [-0.59813136]], dtype=float32), array([2.4205594], dtype=float32)] 위에서 봤던 y = 수식처럼 작성하면 아래와 같은 모양 y = -0.08650918 * x1 + 0.08076939 * x2 + -0.05519128 * x3 + 3.3360822 * x4 + 1.4669524 * x5 + 3.7811213 * x6 + 0.02130296 * x7 + -0.87434626 * x8 + 0.14586656 * x9 + -0.0088202 * x10 + 0.08197837 * x11 + 0.01700737 * x12 + -0.59813136 * x13 * x+ 2.4205594 """
*Colab에서 로컬파일을 읽어오고 싶다면
-왼쪽의 폴더 메뉴 바에서 Colab 서버에 파일 업로드를 한 다음, 경로복사( /content/sample_data/boston.csv 형태)하면 로컬데이터 읽어올 수 있음
*학습의 실제(딥러닝 워크북)
-매 학습 epochs 마다 Weight와 Bias 값을 조금씩 변화시켜가면서, loss 값을 확인해서 앞으로 변해가야 하는 방향을 체크.
-Weight를 키웠을 때 loss가 증가했다면, 이후 Weight는 감소해야 함을 의미(+- 방향성 체크)
-미분을 통해 Weight, Bias 값을 변화시켜가면서 loss가 충분히 줄어들 때까지 위 과정을 반복
'생활코딩 > 머신러닝야학' 카테고리의 다른 글
Tensorflow - 데이터 타입과 N/A값 (전처리 Tip) (0) 2020.08.19 Tensorflow - 히든레이어와 인공신경망 (0) 2020.08.19 Tensorflow - 분류모델, 원핫인코딩, Softmax(아이리스 품종 분류) (0) 2020.08.18 Tensorflow - 지도학습 순서(레모네이드 판매 예측) (0) 2020.08.14 Pandas 기초 - shape, indexing, columns, head (0) 2020.08.14