1. 다중 분류 문제
- 다중 분류
- 여러 개의 답 중 하나를 고르는 분류
- 이항 분류와는 접근이 다름
Q. 꽃잎의 모양과 길이에 따라 다른 아이리스의 품종을 구별
- 샘플 수: 150
- 속성 수: 4
- 정보 1: 꽃받침 길이(sepal length, 단위: cm)
- 정보 2: 꽃받침 너비(sepal width, 단위: cm)
- 정보 3: 꽃잎 길이(petal length, 단위: cm)
- 정보 4: 꽃잎 너비(petal width, 단위: cm)
- 클래스: Iris-setosa, Iris-versicolor, Iris-virginica
2. 상관도 그래프
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
np.random.seed(3)
tf.random.set_seed(3)
# 데이터 입력
df = pd.read_csv('C:/Users/kang mingu/dataset/iris.csv', names = ["sepal_length", "sepal_width", "petal_length", "petal_width", "species"])
# 그래프로 확인
sns.pairplot(df, hue='species');
plt.show()
- pairplot()을 사용 하여 데이터 전체를 한번에 보는 그래프 출력
- 품종별로 꽃입과 꽃받침의 크기와 너비가 차이가 있음을 확인
3. 원-핫 인코딩(one-hot-encoding)
- 여러 개의 y값을 0과 1로만 이루어진 형태로 바꿔 주는 기법
- 활성화 함수를 사용하려면 y값이 0과 1로 이루어져야 하기 때문
- 아래와 같은 형태로 처리
from sklearn.preprocessing import LabelEncoder
import numpy as np
e = LabelEncoder()
e.fit(Y_obj)
Y = e.transform(Y_obj)
Y_encoded = tf.keras.utils.to_categorical(Y)
import pandas as pd
# 원-핫 인코딩 처리를 합니다.
y = pd.get_dummies(y)
# 원-핫 인코딩 결과를 확인합니다.
print(y[0:5])
둘 중 하나를 사용
4. 아이리스 품종 예측 실행
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.preprocessing import LabelEncoder
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
# 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분입니다.
np.random.seed(3)
tf.random.set_seed(3)
# 데이터 입력
df = pd.read_csv('C:/Users/kang mingu/dataset/iris.csv', names = ["sepal_length", "sepal_width", "petal_length", "petal_width", "species"])
# 그래프로 확인
sns.pairplot(df, hue='species');
plt.show()
# 데이터 분류
dataset = df.values
X = dataset[:,0:4].astype(float)
Y_obj = dataset[:,4]
# 문자열을 숫자로 변환
e = LabelEncoder()
e.fit(Y_obj)
Y = e.transform(Y_obj)
Y_encoded = tf.keras.utils.to_categorical(Y)
# 모델의 설정
model = Sequential()
model.add(Dense(16, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
# 모델 컴파일
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
# 모델 실행
model.fit(X, Y_encoded, epochs=50, batch_size=1)
# 결과 출력
print("\n Accuracy: %.4f" % (model.evaluate(X, Y_encoded)[1]))
97.33%의 예측 정확도를 확인
'ML > 모두의 딥러닝' 카테고리의 다른 글
13-2장) 모델 저장과 재사용 (0) | 2023.07.12 |
---|---|
13-1장) 과적합 피하기 (0) | 2023.07.11 |
11장) 데이터 다루기 (0) | 2023.07.11 |
10장) 모델 설계하기 (0) | 2023.07.10 |
9장) 신경망에서 딥러닝으로 (0) | 2023.07.10 |