https://opentutorials.org/course/4570/28987
세번째 딥러닝 - 아이리스 품종 분류 - 생활코딩
수업소개 아이리스 품종을 분류하는 딥러닝 모델을 텐서플로우를 이용하여 만들어 보고, 분류모델과 회귀모델의 차이점을 이해합니다. 범주형 변수의 처리 방법인 원핫인코딩을 해야하는 이유
opentutorials.org
14강 아이리스 품종 분류
아이리스 꽃 데이터
종속변수가 수치형 변수가 아닌 범주형 데이터(품종)
- 종속 변수가 양적 데이터인 경우 -> 회귀(regression) 알고리즘 사용
- 종속 변수가 범주형 데이터인 경우 -> 분류(classificatior) 알고리즘 사용
분류 모델 코드
# 1.과거의 데이터를 준비합니다.
아이리스 = pd.read_csv('iris.csv')
아이리스 = pd.get_dummies(아이리스)
독립 = 아이리스[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = 아이리스[['품종']]
print(독립.shape, 종속.shape)
# 2. 모델의 구조를 만듭니다
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')
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=1000)
# 4. 모델을 이용합니다
print("Predictions: ", model.preict(독립[0:5]))
15강 원핫인코딩
독립변수 4개, 종속변수 1개
꽃잎길이 | 꽃잎폭 | 꽃받침길이 | 꽃받침폭 | 품종 |
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3 | 1.4 | 0.2 | versicolor |
4.7 | 3.2 | 1.3 | 0.2 | virginica |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
범주형 데이터 -> 수식에 사용할 수 있는 형태로 바꿔주는 과정 필요
범주형 데이터를 1과 0의 데이터로 바꿔주는 과정을 원핫인코딩이라 함
아이리스 = pd.read_csv('iris.csv')
# 원핫인코딩
아이리스 = pd.get_dumies(아이리스)
독립변수 4개, 종속변수 3개
꽃잎길이 | 꽃잎폭 | 꽃받침길이 | 꽃받침폭 | 품종.setosa | 품종.versicolor | 품종.virginica |
5.1 | 3.5 | 1.4 | 0.2 | 1 | 0 | 0 |
4.9 | 3 | 1.4 | 0.2 | 0 | 1 | 0 |
4.7 | 3.2 | 1.3 | 0.2 | 0 | 0 | 1 |
4.6 | 3.1 | 1.5 | 0.2 | 1 | 0 | 0 |
퍼셉트론:
16강 softmax
분류 예측
ex) 내일은 비가 올 확률이 30%야.
👉 분류 모델이 분류를 추측하는 것을 사람이 표현하듯 확률로 표현하게 해주기 위한 도구: sigmoid, softmax
softmax
분류모델에서는 수식의 결과인 y 값이 최솟값은 0, 최댓값은 1이 나오도록 해야 함
softmax 함수를 Activation 함수로 넣어 감싸주면 됨.
Y = tf.keras.layers.Dense(3, activation='softmax')(X)
loss
loss 는 모델이 내놓는 결과가 실제 정답과 차이가 있는가를 나타내는 지표
👉 문제에 따라 문제 유형에 알맞은 loss를 사용해주어야 함.
- 분류에 사용하는 loss: cross entropy
- 회귀에 사용하는 loss: mse
❗ 분류 문제에는 "정확도" 라는 지표가 존재. -> compile 부분을 저장해주면 결과에서 정확도를 함께보여줌.
(1 = 100% 맞은 것, 0 = 틀린 것)
model.compile(loss='categorical_crossentropy', metrics='accuracy')
17강 아이리스 품종 분류 (실습)
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
#################################
# 1. 과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
아이리스 = pd.read_csv(파일경로)
아이리스.head()
# 원핫인코딩
인코딩 = pd.get_dummies(아이리스)
인코딩.head() #결과 확인
#독립변수, 종속변수
독립 = 인코딩[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = 인코딩[['품종_setosa', '품종_versicolor', '품종_virginica']]
print(독립.shape, 종속.shape)
#################################
# 2. 모델의 구조를 만듭니다.
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')
#################################
# 3. 데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=1000)
#################################
# 4. 모델을 이용합니다.
model.predict(독립[0:5]) #처음 다섯 개의 데이터를 가지고 예측
model.predict(독립[-5:]) #뒤의 다섯 개의 데이터를 가지고 예측
# 학습한 가중치
model.get_weights() # 각각의 칼럼이 setosa, versicolor, virginica일 확률을 나타내는 수식의 가중치
'스터디📖 > ML, DL' 카테고리의 다른 글
Tensorflow (python) - 20강 부록1: 데이터를 위한 팁 (0) | 2021.09.28 |
---|---|
Tensorflow (python) - 18, 19강 네번째 딥러닝 - 신경망의 완성:히든레이어 (0) | 2021.09.28 |
Tensorflow (python) - 13강 학습의 실제 (0) | 2021.08.27 |
Tensorflow (python) - 10, 11, 12강 두번째 딥러닝 - 보스턴 집값 예측 (0) | 2021.08.25 |
Tensorflow (python) - 7, 8, 9강 첫번째 딥러닝 - 레모네이드 판매 예측 (0) | 2021.08.24 |