-
[생활코딩 - 머신러닝 야학] 텐서플로우 day 3,4공부일기/머신러닝 야학 2020. 8. 25. 22:22
1 - 10. 보스턴 집값 예측
1 - 11. 수식과 퍼셉트론
13개의 입력으로 부터 한개의 출력을 만들어내는 구조를 만든다. 한개의 출력을 만드는 구조의 완전한 표현은 y = w1x1 + w2x2 + ... + w13x13 + b 수식이다(예제 기준). 컴퓨터는 입력되는 수식의 y와 x를 보고 w와 b를 찾게 된다. 뉴런이 실제 두뇌세포의 이름이면, 이 뉴런역할을 하는 모형의 이름을 퍼셉트론이라고 한다. w는 가중치, b는 편향이라고 부른다.
1 - 12. 보스턴 집값 예측(실습)
# 파일 읽어오기 파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv' 보스턴 = pd.read_csv(파일경로) # 모양 확인하기 print(보스턴.shape) # 독립 변수와 종속변수 분리 후 출력하기 독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat']] 종속 = 보스턴[['medv']] print(독립.shape, 종속.shape) # 모델 만들기 X = tf.keras.layers.Input(shape=[13]) Y = tf.keras.layers.Dense(1)(X) model = tf.keras.models.Model(X, Y) model.compile(loss='mse') # 학습 시키기 model.fit(독립, 종속, epochs=1000, verbose=0) model.fit(독립, 종속, epochs=10) # 예측 하고 비교하기 model.predict(독립[0:5]) 종속[0:5] # 수식 구하기 model.get_weights()
데이터를 읽어오고, 독립 변수와 종속 변수로 나눈 후 모델을 만들고 학습시킨 뒤 예측하고 비교하는 과정은 앞서 배운 레몬에이드 예제와 같았다. 다만 다른 부분은 보스턴 예제의 경우 원인이 되는 독립 변수가 13개나 된다는 점이었다. 그래서 그런지 로스율이 24이하로 잘 떨어지지 않았고, 레몬에이드 예제 만큼이나 정확하게 예측이 되질 않았다. 강의에서도 회귀에서 정답률을 100%까지 올리는건 거의 불가능하다고 했다. 아마 다양한 모델들을 결합해야 그나마 가까이 갈 수 있지 않을까 싶다.
1 - 13. 학습의 실제
라이브러리를 사용해 컴퓨터가 학습하는 과정을 신기해하고 있을 때 워크북을 통해 어떤 과정을 거치는지 작게나마 예측해볼 수 있었다. 초기 설정값으로 로스율을 구하고 미분을 해서 로스율을 줄여나가는... 과정이었는데 이걸 스스로 학습(물론 코딩이 돼있는 부분이지만)해서 값을 줄여 나간다는 게 다시 한 번 신기했다.
1 - 14. 아이리스 품종 분류
종속 변수가 숫자이고 양적데이터로 구분되면 회귀모델을 사용하며 종속 변수가 문자나 이름이고 범주형데이터로 구분되면 분류모델을 사용한다.
1 - 15. 원핫인코딩
범주형 데이터를 1과 0의 데이터로 바꿔주는 과정을 원핫인코딩이라고 한다. 딥러닝 모델을 사용하기 위해서는 모든 범주형 모델을 원핫인코딩 해줘야 하며 이 때 사용 되는 코드는 pd.get_dummies() 이다. 이 코드는 데이터 내의 범주형 데이터만 골라서 전부 원핫인코딩된 결과를 만들어 낸다. 다시 종속변수와 독립변수를 분리하면 데이터의 준비는 끝난다.
1 - 16. softmax
비율로 예측하기 위해 activation 활성화 함수 중 분류모델의 sotfmax 함수를 사용한다. sotfmax() 함수로 수식을 감싸게 되면 0과 1사이의 값을 받게 된다. compile하는 부분에서 metrics를 사용하게 되면 정확도를 나타내주는데, 이는 사람이 보기 더 편하게 만들어 준다.
1 - 17. 아이리스 품종 분류(실습)
# 머신러닝을 위한 라이브러리 불러오기 import pandas as pd import tensorflow as tf # 데이터 불러오고 읽기 파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv' iris = pd.read_csv(파일경로) iris.head() # 분류를 위한 인코딩함수 추가 및 확인 incod = pd.get_dummies(iris) incod.head() # 독립변수와 종속변수 나누기 in_v = incod[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']] de_v = incod[['품종_setosa', '품종_versicolor', '품종_virginica']] # 모델 만들기 X = tf.keras.layers.Input(shape=[4]) Y = tf.keras.layers.Dense(3, activation='softmax')(X) model = tf.keras.models.Model(X, Y) model.compile(loss='categorical_crossentropy', metrics='accuracy') # 학습하기 model.fit(in_v, de_v, epochs=10) ## 학습할 때 accuracy만 보게 되면 오르지 않는 경우도 있으나 loss값이 줄어드는 것을 확인하고 ## 몇 번 더 학습을 시키키다 보면 accuracy 값도 올라가는 것을 볼 수 있다. # 모델을 이용해 예측이 맞는지 확인하기 model.predict(in_v[-5:]) print([de_v[-5:]]) # 수식 구하기 model.get_weights()
'공부일기 > 머신러닝 야학' 카테고리의 다른 글
[생활코딩 - 머신러닝 야학] 텐서플로우 day 5/ 후기 (0) 2020.08.27 [생활코딩 - 머신러닝 야학] 텐서플로우 day 1,2 (0) 2020.08.23 [생활코딩 - 머신러닝 야학] 머신러닝1 day5, 6 (0) 2020.08.19 [생활코딩 - 머신러닝 야학] 머신러닝1 day3, 4 (0) 2020.08.18 [생활코딩 - 머신러닝 야학] 머신러닝1 day2 (0) 2020.08.17