본문 바로가기
빅데이터전문가양성과정

머신러닝을 이용한 붓꽃 품종 분류

by HoneyIT 2020. 11. 23.

꽃잎 데이터셋

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris

iris_dataset = load_iris()
iris_dataset.keys()

 

data, target, target_names, DESCR, feature_names, filename을 가지는 iris 데이터셋을 가져옵니다.

 

 

품종 확인

iris_dataset['target_names']

 

setosa, versicolor, virginica 세 종류의 품종이 있다는 것을 알 수 있습니다.

 

 

데이터 형식

print('Type of data : {}'.format(iris_dataset['data'].dtype))
print('Size of data : {}'.format(iris_dataset['data'].shape))

 

format 함수를 이용하여 데이터 타입과 형식을 확인할 수 있습니다.

 

 

훈련 데이터와 테스트 데이터로 나누기

- 붓꽃 데이터를 훈련 데이터(75%)와 테스트 데이터(25%)로 나눕니다.

- 2차원 배열 형태인 data를 X, 1차원 배열 형태인 target을 y로 표현합니다.

- 옵션 random_state : 정수를 입력하면 숫자를 random하게 생성할 때 사용되는 seed 숫자로 사용합니다.

- suffle로 bool값, 데이터를 분리하기 전에 섞을 것인지를 지정합니다. 기본값은 True

 

 

데이터의 이상유무 확인

 

  • 머신러닝이 없어도 풀 수 있는 문제인지
  • 필요한 정보가 누락되지 않았는지
  • 비정상적인 값이나 특이값은 없는지

 

mglearn 라이브러리 설치

!apt install mglearn
!pip install mglearn

mglearn은 그래프와 데이터셋을 손쉽게 다룰 수 있도록 만든 라이브러리

 

import mglearn
import matplotlib.pyplot as plt
import seaborn as sb

 

X_train으로 데이터 프레임 만들기

dfIris = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
dfIris['kind'] = y_train
dfIris

 

 

sb.pairplot(dfIris, vars=['sepal length (cm)',  'sepal width (cm)',  'petal length (cm)',  'petal width (cm)'], 
            hue = 'kind', markers=["o", "s", "D"], palette="hls", height=3)
plt.show()

 

 

 

from sklearn.neighbors import KNeighborsClassifier as knc
knn = knc(n_neighbors = 3) #3개의 데이터를 살펴보겠다.
knn.fit(X_train, y_train)
knc(algorithm = 'auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=1,
    n_neighbors=3, p=2, weights='uniform')

 

X_new = np.array([[5,2.9,1,0.2]])
prediction = knn.predict(X_new)

print("예측 : {}".format(prediction))
print("예측한 타깃의 이름: {}".format(iris_dataset['target_names'][prediction]))

 

테스트셋 확인

dfIrisTestSet = pd.DataFrame(X_test, columns=iris_dataset.feature_names)
dfIrisTestSet

행을 X_test로 컬럼을 iris_dataset의 feature_names로 데이터 프레임을 만들어 확인합니다.

 

 

테스트 결과 확인

y_pred = knn.predict(X_test)

print("테스트 세트에 대한 예측값  \n {}".format(y_pred))
print("테스트 세트의 정확도 : {:.2f}".format(knn.score(X_test, y_test)))

 

 

결과 확인

y_test