You are on page 1of 7

1

2021-35779 천지은
20
2
데이터 처리
# 그래프 그리기
import seaborn as sns
import matplotlib.pyplot as plt
sns.pairplot(df, hue='species');
plt . show( )

# 데이터 보기
import pandas as pd
df = pd . read_csv( ' .. /dataset/iris . csv ' , names =
[ "sepal_length" , "sepal_width" ,
"petal_length" ,"petal_width" , ;,species" ] )
print (df . head( ) ) sepal
3
데이터 처리와 사용한 함수

원 - 핫인코딩 소프트맥스

* 여러 개의 Y 값을 0 과 1 로만 이루어진 형태 * 그림과 같이 총합이 1 인 형태로 바꿔서 계산해 주는 함수


로 바꿔 주는 기법
합계가 1 인 형태로 변환하면 큰 값이 두드러지게
1. 아이리스 이름을 숫자로 변환 (1,2,3) 나타나고 작은 값은 더 작아져 이 값이 교차 엔트로피를
sklearn 라이브러리의 LabelEncoder( ) 함수 지나 [1., 0., 0.] 으로 변하게 되면 원一핫 인코딩 값 , 즉
하나만 l 이고 나머지는 모두 0 인 형태로 전환 가능
2. 숫자를 0 과 1 로 변환
활성화 함수를 적용하려면 Y 값이 숫자 0 과 l 4
로 이루어져 있어야 하기 때문에
tf.keras.utils.categorical( ) 함수를 적용
파이선 코드
# 딥러닝을 구동하는데 필요한 케라스 함수 호출
from tensorflow.keras.models import Sequential
from tensorflow.keras. layers import Dense # sklearn 함수에서 문자를 기호화하는 코드 호출
from sklearn.preprocessing import LabelEncoder # tensorflow : 이미지 구분에 많이 쓰임

import pandas as pd
import seaborn as sns
import matplotlib . pyplot as plt
import numpy as np # 라이브러리란 특정 기능을 담은 작은 프로그램 ( 모듈 , module)
import tensorflow as tf # matplotlib 과 seaborn 은 파이썬에서 그래프를 그리는 라이브러리
# 넘파이는 수치 계산을 위해 만들어진 라이브러리로 데이터 분석에 많이 사용
# seed 값 설정
np.random.seed(3) # 넘파이 (numpy) 라는 라이브러리를 np 라는 이름으로 불러오라는 뜻
tf.random.set_seed(3)

# 데이터 입력
df = pd.read_csv( ' .. /dataset/ iris . csv ' , names = [ " sepal_length # 실행할 때마다 같은 결과를 출력하기 위해 설정하는 부분으로 랜덤 테이블
5
" , "sepal_width", "petal_length", "petal_width", "species"]) 중에서 몇 번째 테이블을 불러와 쓸지를 정하는 것 . 넘파이 라이브러리를
사용하면서 텐서플로 기반으로 딥러닝을 구현할 때는 일정한 결과값을 얻기
# 그래프 확인
sns.pairplot(df, hue='species'); 위해 넘파이 seed 값과 텐서플로 seed 값을 모두 설정 .
plt . show( )

# 데이터 분류
dataset = df.values
X = dataset[ : ,0:4) .astype(float)
Y_obj = dataset [ : , 4 )
# 문자열을 숫자로 변환
e = LabelEncoder( ) Y 값이 문자열이라 문자열을 0 과 1 의 숫자로 바꿔 주기 위해
e.fit(Y_obj) LabelEncoder( ) 함수 , tf . keras . utils . to_categorical( ) 함수 활용 ,
Y = e.transform(Y_obj)
Y_encoded = tf . keras . utils . to_categorical(Y)

model = Sequential( )로 시작되는 부분은 딥러닝의 구조를 짜고 층을 설정


# 모델의 설정
model = Sequential ( ) activation: 다음 층으로 어떻게 값을 넘길지 결정하는 부분
model. add( Dense( 16, input_dim=4, activation= ' relu ' ) )
loss: 한 번 신경망이 실행될 때마다 오차 값을 추적하는 함수
model.add(Dense(3, activation='softmax' ))
optimize : 오차를 어떻게 즐여 나갈지 정하는 함수
# 모델 컴파일 dim 은 입력값에서 몇 개를 가져올지 결정 , 보통 요소의 수
model.compile(loss='categorical_crossentropy',
optimizer= ' adam ' ,
metrics=[ ' accuracy ' ] )
model.compile( ) 부분은 모델을 효과적으로 구현될 수 있게 환경을 설정 .

6 categorical_crossentropy : 범주형 교차 엔트로피 ( 일반적인 분류 ) 는 일반 분류에 가장


# 모델실행
model. fit(X, Y_encoded, epochs=50, batch_size=1) 많이 씀 .
아담 (Adam) 은 현재 가장 많이 사용되는 고급 경사 하강법
# 결과출력
print( "\n Accuracy : % . 4f" % (model. evaluate(X, Y_encoded )
[ 1 ]) )
model.fit( ) 은 정해진 환경을 주어진 데이터를 불러 실행시킬 때 사용되는 함수
epoch: 50 번 재사용할 때까지 실행 , batch_size 샘플을 한번에 1 개 처리
결과
Train on 150 samples

Epoch 1/50
150/150 [======l-Os 3ms/sample - loss: 1.2541
- accuracy: 0.3733
Epoch 2/50
150/150 [ =====] _ Os 1ms/sample - loss: 0.9932
- accuracy: 0.4200
Epoch 3/50
150/150 [========l-Os 1ms/sample - loss: 0.7919
- accuracy: 0.6400

( 중략 )

Epoch 49/50
예측 정확도가 98.67% 로 측정
150/150 [==] - Os 1ms/sample - loss: 0.0884
7
150 개의 샘플을 한 번씩 테스트한 결과
- accuracy: 0.9667 148 개의 품종을정확히 맞히는확률
Epoch 50/50
150/150 [==] - Os 999us/sample - loss: 0.0894
- accuracy: 0.9733

Accuracy: 0.9867

You might also like