[개발/머신러닝] - [생활코딩/머신러닝야학] 레모네이드 판매량 예측(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
회귀와 분류를 정확하게 분리하고, 그거에 맞게 학습 수식을 생성하기 😁
나의 최종 목표 로또 예측하는 모델 만들기‼️
수업 감사합니다~
'개발 > 머신러닝' 카테고리의 다른 글
[생활코딩/머신러닝야학] 데이터 및 모델을 위한 팁(부록) (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 |