k-means clustering이란 이름에서 알 수 있듯이 주어진 데이터셋을 k개의 중심점을 기준으로 하여 그룹짓는 방법이다.
KMeans(n_clusters=??) n_clusters 인자에 의해 몇개로 나뉠것인지 갯수를 정하게 됩니다.
KMeans 예제는 데이터는 2개 이차원(x,y) 값이 주어지고 나누게 됩니다. 여기에서 입력으로 사용하게 되는 format은 dataframe형태이지만, list의 list형태로도 가능합니다.
https://github.com/donarts/sourcecode/blob/main/python/example/3_kmeans_random_1.py
#KMeans |
from sklearn.cluster import KMeans |
import matplotlib.pyplot as plt |
import pandas as pd |
import random |
x = [random.randrange(1,100) for n in range(0,100)] |
y = [random.randrange(1,100) for n in range(0,100)] |
data = pd.DataFrame({"x":x,"y":y}) |
print(data) |
''' |
x y |
0 32 1 |
1 49 99 |
2 78 21 |
.. .. .. |
[100 rows x 2 columns] |
''' |
# 모델 만들기 |
model = KMeans(n_clusters=3) |
# 학습 |
model.fit(data) |
# predict |
predictions = model.predict(data) |
# 그림을 그리기 쉽게하기 학위해서 예측 결과를 dataframe으로 만들어서 붙이기 |
predict = pd.DataFrame(predictions) |
predict.columns=['predict'] |
# concatenate labels to df as a new column |
r = pd.concat([data,predict],axis=1) |
print(r) |
''' |
x y predict |
0 32 1 0 |
1 49 99 1 |
2 78 21 2 |
.. .. .. ... |
[100 rows x 3 columns] |
''' |
# 그림 그리기 |
plt.scatter(r['x'],r['y'],c=r['predict']) |
plt.show() |
# 임의의 하나의 데이터 입력하여 예측, input one data |
prediction = model.predict([[1,100]]) |
print(prediction) |
''' |
[1] |
''' |
결과
Result | |
x y | |
0 5 50 | |
1 39 38 | |
2 20 98 | |
3 93 2 | |
4 16 6 | |
.. .. .. | |
95 62 41 | |
96 76 73 | |
97 61 11 | |
98 97 27 | |
99 48 36 | |
[100 rows x 2 columns] | |
x y predict | |
0 5 50 2 | |
1 39 38 2 | |
2 20 98 1 | |
3 93 2 0 | |
4 16 6 2 | |
.. .. .. ... | |
95 62 41 0 | |
96 76 73 1 | |
97 61 11 0 | |
98 97 27 0 | |
99 48 36 0 | |
[100 rows x 3 columns] | |
[1] |
비지도 학습이라고 불리는것은 것은 예제에서 x,y값은 주어지고 해당값이 어떤 그룹에 속하는지 미리 설정하지 않기 때문입니다.(label이 없음) 그러나 생각해보면 적당한 k값을 설정하지 않으면 원하는 결과를 얻을 수 없습니다.
댓글 없음:
댓글 쓰기