-
[scikit-learn] Iris 데이터를 이용한 머신러닝_KmeansAI 2020. 2. 25. 15:49
비지도학습이란 ?
- 지도학습과는 다르게 데이터에 대한 정답, 즉 라벨을 사용하지 않고 모델을 만들 수 있다.
k-평균 군집화(K-means Clustering) ?
- 주어진 데이터를 k개의 클러스터로 묶는 알고리즘
- 각 클러스터와 거리 차이의 분산을 최소화하는 방식으로 동작한다.
- k는 클러스터의 중심 수를 의미한다.
Iris 데이터에 관한 전처리는 미리 되어 있다는 가정하에 사이킷런을 이용한 군집화를 진행한다.
사이킷런 라이브러리의 k-평균 군집화 함수 불러오기
from sklearn.cluster import KMeans
k 값을 의미하는 군집의 개수를 설정하기
k_means = KMeans(n_clusters=3)
n_clusters는 k값을 의미하는 것으로 군집의 개수를 뜻한다.
train 데이터를 이용해서 모델을 학습시키기
k_means.fit(train_input)
cluster의 군집 확인
k_means.labels_
여기에 나오는 라벨은 실제 Iris 종의 라벨을 의미하는 것이 아니다.
군집이 0번째, 1번째 또는 2번째 인지를 나타내는 라벨이다.
그렇기 때문에 이 값은 실행 할때마다 결과가 변동 될 수도 있다.각 군집의 종을 확인하기
print("0 cluster: ", train_label[k_means.labels_ == 0]) print("1 cluster: ", train_label[k_means.labels_ == 1]) print("2 cluster: ", train_label[k_means.labels_ == 2])
이 결과를 통해 몇번째 cluster에 몇번 라벨이 주로 분포해 있는지 확인 할 수 있다.
test 데이터를 이용해서 결과값(label) 예측하기
predict_cluster = k_means.predict(test_input) print(predict_cluster)
보기 편하게 군집을 의미하는 값을 Iris의 종을 의미하는 값으로 변경하기
import numpy as np np_arr = np.array(predict_cluster) np_arr[np_arr == 0], np_arr[np_arr == 1], np_arr[np_arr == 2] = 3, 4, 5 np_arr[np_arr == 3] = 1 np_arr[np_arr == 4] = 0 np_arr[np_arr == 5] = 2
predict_label = np_arr.tolist() print(predict_label)
예측한 값과 실제 값을 비교하여 성능을 확인하기
print(f"test accuracy: {np.mean(predict_label == test_label):.2f}")
Iris 데이터를 이용해서 Kmeans clustering을 해보았다.
이것은 단순히 한번 사용해 본것에 지나지 않으므로 추가적은 공부가 필요해 보인다.
참고
https://github.com/Lagom92/TIL/blob/master/AI/scikit-learn.ipynb
'AI' 카테고리의 다른 글
Pytorch Classifier Tutorial (0) 2021.03.04 교차 검증(Cross validation) (0) 2020.08.21 [scikit-learn] Iris 데이터를 이용한 머신러닝_KNN (0) 2020.02.20 파이썬으로 xlsx 파일과 csv 파일 다루기 (0) 2019.09.18 pickle 모듈 (0) 2019.08.21