Broccoli's House

#1-(2) 예제 : 붓꽃의 품종 분류 본문

공부/머신러닝

#1-(2) 예제 : 붓꽃의 품종 분류

김콜리 2018. 1. 20. 00:44

※ 이 글의 내용은 O'REILLY의 <파이썬 라이브러리를 활용한 머신러닝> 책을 기반으로 한다.




예제 : 붓꽃의 품종 분류




  • 데이터 불러오기 및 확인

from sklearn.datasets import load_iris
iris_dataset=load_iris()
# scikit-learn 라이브러리에서 붓꽃의 품종 데이터를 불러와 변수에 저장한다.


print("iris_dataset의 키 : {}".format(iris_dataset.keys()))
# 붓꽃의 데이터 세트의 키워드를 출력한다.

>>  iris_dataset의 키 : dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])

# 'DESCR'은 데이터 세트에 대한 간략한 설명, 'target_names'는 분류해야하는 붓꽃 품종의 이름, 'feature_names'는 붓꽃 특성의 이름, 'data'는 붓꽃의 각 특성에 해당하는 값, 'target'은 data에 맞는 붓꽃의 품종 값을 각각 가지고 있다.




  • 모델 평가를 위한 데이터 처리

 - 머신러닝 모델이 잘 작동하는지 알기 위해서는, 모델을 평가할 수 있는 데이터가 필요하다. 

 - 모델을 만들 때 사용했던 데이터는 모델이 데이터를 모두 기억할 수 있으므로 평가 목적으로 사용해서는 안된다. 따라서, 데이터 세트를 훈련 데이터(Training data)와 테스트 데이터(Test data)로 나눈다. 전체 데이터 세트를 75%의 훈련 세트와 25%의 테스트 세트로 나누는 것이 일반적이다.


from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(iris_dataset['data'],iris_dataset['target'],random_state=0)
# scikit-learn 라이브러리의 train_test_split 함수는 전체 데이터 세트를 75%의 훈련 세트와 25%의 테스트 세트로 나누어준다.

기존의 데이터 세트를 그대로 나눌 경우 테스트 세트가 모두 같은 값이 될 수 있으므로, 나누기 전에 데이터를 섞어준다.




  • 머신러닝 모델 만들기 : k-최근접 이웃 알고리즘

 - k-최근접 이웃(k-Nearest Neighbors, k-NN) 알고리즘 : 지도 학습의 한 종류로, 입력 데이터가 들어오면 그 데이터와 가장 가까운 거리에 있는 k개의 데이터 레이블을 참조하여 입력 데이터의 레이블을 정하는 방식의 알고리즘이다.


from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)
# scikit-learn 라이브러리의 k-NN 분류 알고리즘을 불러와 knn 객체에 저장한다.

훈련 데이서 세트로부터 fit 메소드를 사용하여 모델을 만든다.




  • 예측하기

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]))
# 레이블을 모르는 새로운 데이터를 정의하고, knn객체의 predict 메소드를 사용해 품종에 대한 타겟값을 예측한다.


>> 예측 : [0]

>> 예측한 타겟의 이름 : ['setosa']




  • 모델 평가하기
y_pred=knn.predict(X_test)
print("테스트 세트에 대한 예측 값 :\n {}".format(y_pred))
print("테스트 세트의 정확도 : {:.2f}".format(knn.score(X_test,y_test)))
# 테스트 세트에 대한 타겟 값을 predict 메소드를 통해 예측한다.
# score 메소드를 사용하여 테스트 세트의 정확도를 계산한다. 




Comments