| [개발/머신러닝] - [생활코딩/머신러닝야학] 레모네이드 판매량 예측(1) - pandas |
| [개발/머신러닝] - [생활코딩/머신러닝야학] 레모네이드 판매량 예측(2) - neural network |
| [개발/머신러닝] - [생활코딩/머신러닝야학] 보스턴 집값 예측 |
** 지도학습 - neural network(신경망)
순서😁
- 아이리스 품종을 분류하는 딥러닝 모델 생성
- 분류 모델과 회귀모델의 차이점을 정리
- 범주형 변수의 처리 방법인 원핫인코딩
- 활성화 함수 softmax
- 레모네이드 판매량 예측, 보스턴 집값 예측은 종속변수(결과)가 양적 데이터인 경우로 '회귀' 방식을 사용했다.
- 이번에는 아이리스의 품종 분류는 종속변수(결과)가 범주형 데이터인 경우로 '분류'방식을 사용한다.
- 범주형 데이터는 수식에서 사용할 수 있도록 양적 데이터로 변경하는 과정이 필요하며, 이것을 '원핫인코딩(onehot-encoding)'이라고 한다.
- 원핫인코딩은 범주형 데이터를 0과 1로 바꿔준다.
- 모든 범주형 변수는 원핫인코딩해주어야 한다.

*실습
1. 원핫인코딩은 pandas의 get_dummies 함수를 사용한다.
2. 분류 문제를 풀기 위해서는 Dense layer 구축 시에 그에 해당하는 활성화 함수 인수를 추가해야 하는데, 대표적으로 Softmax가 있다. 이는 '비율'로써 분류를 예측값(0~1) 사이의 결과를 출력해준다.
3. loss는 모델이 학습하는 방법으로, [ 회귀 - 'mse', 분류 - 'categorical_crossentropy'] 사용
4. 분류에서 loss 외에도 사람이 알아볼 수 있는 값으로, 1- 100% 값으로 알려주며, 0인 경우 전부 틀린 것 (로그가 출렸되었을때, 확인할 수 있다.)
5. 모델 학습이 잘 이루어지고 있는지는 loss를 확인한다.
6. 분류 - Compile 시, loss는 'categorical_crossentropy', accuracy는 metrics=['accuracy'] 작성
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 라이브러리 사용
import tensorflow as tf # pip install --upgrade tensorflow
import pandas as pd # pip install pandas
#1. 과거의 데이터 준비
iris = pd.read_csv('https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv')
print(iris.head())
# 원핫인코딩
iris_incoding_ = pd.get_dummies(iris)
print(iris_incoding_.head())
print(iris_incoding_.columns)
# 독립변수, 종속변수
independent_var = iris_incoding_[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']] #독립변수
dependent_var = iris_incoding_[['품종_setosa', '품종_versicolor','품종_virginica']] #종속변수
print('iris 독립변수 = {}, 종속변수 = {}\n'.format(independent_var.shape ,dependent_var.shape))
independent_var_row = independent_var.shape[0] # 독립변수 행(row)
independent_var_col = independent_var.shape[1] # 독립변수 열(col)
dependent_var_row = dependent_var.shape[0] # 종속변수 행(row)
dependent_var_col = dependent_var.shape[1] # 종속변수 열(col)
#2. 모델의 구조를 만듬(모델생성)
X = tf.keras.layers.Input(shape=[4])# 독립변수의 컬럼개수
Y = tf.keras.layers.Dense(3, activation='softmax')(X)
# 종속변수의 컬럼개수, activation(활성화함수) = sottmax 0~1사이의 비율로 결과 출력
model = tf.keras.models.Model(X, Y) # 모델 생성
model.compile(loss='categorical_crossentropy',metrics=['accuracy']) # 모델이 학습할 방법
# loss는 분류와 관련된 categorical_crossentropy
# loss 외에도 정확도가 주요 평가 지표 정확도(accuracy)
# 3. 데이터로 모델을 학습(FIT)
model.fit(independent_var, dependent_var, epochs=10) # epochs = 전체 데이터를 몇번반복 학습할 것인지를 결정해 주는 숫자
model.fit(independent_var, dependent_var, epochs=100, verbose=0) # verbose =0 출력(로그) 표시안함
# 4. 모델을 이용
print('**** predict ****')
print(model.predict(independent_var[5:10])) #독립변수 예측값 확인 [5~10개만]
print('******check result(test)********')# 종속변수 확인
print(dependent_var[5:10]) # 종속변수결과 출력하여 예측한 값이 맞는 지 확인
print('************************************')
# 맨 마지막 데이터 5개
print('**** predict ****')
print(model.predict(independent_var[-5:]))
print('******check result(test)********')
print(dependent_var[-5:])
# 모델의 수식 확인
# print(model.get_weights())
아이리스 품종 예측은, 독립변수 4개 종속변수 3개, 3가지 수식에 대한 가중치 필요하다.
아래의 사진처럼, 예측한 값이 한 줄에 3개씩 출력되어, 값이 더 높은 값이 해당 품종으로 예측한 것이다.
사진 제일 첫 번째 줄을 보면
[0.7783113 0.17450982 0.04717886]
이 중에서 값이 0.7783113이 가장 크고, 이거는 품종_setosa에 해당한다.

opentutorials.org/course/4570/28987
세번째 딥러닝 - 아이리스 품종 분류 - 생활코딩
수업소개 아이리스 품종을 분류하는 딥러닝 모델을 텐서플로우를 이용하여 만들어 보고, 분류모델과 회귀모델의 차이점을 이해합니다. 범주형 변수의 처리 방법인 원핫인코딩을 해야하는 이유
opentutorials.org
회귀와 분류를 정확하게 분리하고, 그거에 맞게 학습 수식을 생성하기 😁
나의 최종 목표 로또 예측하는 모델 만들기‼️
수업 감사합니다~
'개발 > 머신러닝' 카테고리의 다른 글
| [생활코딩/머신러닝야학] 데이터 및 모델을 위한 팁(부록) (0) | 2021.01.21 |
|---|---|
| [생활코딩/머신러닝야학] 신경망의 완성-히든레이어 및 정리 (0) | 2021.01.21 |
| [생활코딩/머신러닝야학] 보스턴 집값 예측 (0) | 2021.01.12 |
| [생활코딩/머신러닝야학] 레몬네이드 판매량 예측(2) - neural network (0) | 2021.01.11 |
| [생활코딩/머신러닝야학] 레몬네이드 판매량 예측(1) - pandas (0) | 2021.01.11 |

