【機械学習】K-meansを勉強してみる
K-meansクラスタリングとは?
K-means はクラスタリングに使われる教師なし学習方法です。
K個のクラスタに分類し、平均値を重心とするのでK-meansと呼ばれています。
K-Meansのアルゴリズム
1) ランダムに1~k個のデータポイントをクラスタの重心$\mu_i$として選ぶ。
2) 残りの全てのデータポイントを1で選んだ一番近いクラスタに割り振る。
3) 各クラスタで平均値を計算し、$\mu_i$をアップデートする。
4) 2~3を重心の変更がなくなるまで繰り返す。
Kの決め方 (Elbow Method)
K-meansではクラスタの数 Kを指定する必要があります。Kが多すぎると過学習してしまったり、逆に少なすぎると、本来分けられるべきデータが同じクラスタに入ってしまう可能性もあります。そこで、最適なKを見つけるのにElbow methodという方法があります。
Elbow method では y軸に損失をとり、x軸にクラスタ数 K をとる下のようなグラフを描きます。この時、肘のように曲がっている部分に値するKを最適なクラスタ数とするので、Elbow Method と呼ばれています。
scikit learn で K-Means
パラメター
パラメター | 概要 | 値 | デフォルト |
---|---|---|---|
n_clusters | クラスタの数 | int | 8 |
init | 初期重心の設定 | 'k-means', 'random', データポイント | 'K-means++'(速く収束させるように自動で選んでくれる) |
n_init | 何回重心を変えるか | int | 10 |
max_iter | 繰り返しの回数 | int | 10 |
tol | 収束の許容値 | float | 1e-4 |
precompute_distance | 距離を行列か個々で計算するか | 'auto', bool | 'auto' |
random_state | 重心の初期値のランダム方法 | int, RandomState instance | None |
n_jobs | 各実行時の同時処理の数 | int | None |
Pythonの実行例
Elbow Method
from sklearn import datasets
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import KMeans
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters = i, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
丁度3ぐらいが肘にあたるので、K = 3で学習させる。
Predict
kmeans = KMeans(n_clusters = 3, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
y_kmeans = kmeans.fit_predict(X)
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Iris-setosa')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Iris-versicolour')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Iris-virginica')
#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'yellow', label = 'Centroids')
plt.legend()
K-meansの利点と欠点
利点
- シンプル。
- 可視化しやすい。
欠点
- スケールに依存しやすい。
- 不均一で広範囲に散らばるデータには向いていない。
Author And Source
この問題について(【機械学習】K-meansを勉強してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/shuva/items/bcf700bd32ae2bbb63c7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .