Practice makes perfect!

[모두의 딥러닝] 12장 다중 분류 문제 해결하기 본문

Study/딥러닝

[모두의 딥러닝] 12장 다중 분류 문제 해결하기

na0dev 2021. 5. 29. 13:10

# species 데이터에 문자열이 있기 때문에 numpy대신 pandas를 이용해 데이터 불러옴

df = pd.read_csv('../dataset/iris.csv',names = ["sepal_length","sepal_width","petal_length","petal_width","species"])
print(df.head())
import seaborn as sns
import matplotlib.pyplot as plt

# pairplot 함수를 이용해 데이터 전체를 한번에 보는 그래프 출력
sns.pairplot(df,hue='species')
plt.show()

# 꽃잎과 꽃받침의 크기와 너비가 품종별로 차이가 있음을 확인할 수 있음.

# 문자열을 숫자로 변환
  클래스 이름(문자열)을 숫자 형태로 바꿔주기 위해 LabelEncoder() 함수 이용

e = LabelEncoder()
e.fit(Y_obj)
Y = e.transform(Y_obj)

# array(['Iris-setosa','Iris-versicolor','Iris-virginica']) => array([1,2,3])

# 원-핫 인코딩 : 여러 개의 Y값을 0과 1로만 이루어진 형태로 바꿔주는 기법
   활성화 함수를 적용하려면 Y값이 숫자 0과 1로 이루어져 있어야 함.
   tf.keras.utils.categorical() 함수 적용

Y_encoded = tf.keras.utils.to_categorical(Y)

# array([1,2,3]) => array([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])

# 모델의 설정

  최종 출력값은 3개 중 하나이므로 출력층의 노드 수는 3으로 설정, 활성화 함수로 softmax 사용
  - softmax : 총합이 1인 형태로 바꿔서 계산해 주는 함수

      -> 큰 값이 두드러지게 나타남 -> 원-핫 인코딩 값으로 전환 가능.

model = Sequential()
model.add(Dense(16,input_dim=4,activation='relu'))

model.add(Dense(3,activation='softmax')) # 출력층

 

 

 

 

반응형
Comments