Unsupervised Learning: Clustering (K-means)の流れ
Clustering (K-means)を1からやってみる
流れ
Sample Dataの作成
make_blobs関数で生成。シードは適当。
import sklearn.datasets import make_blobs data, _ =make_blobs(random_state=5) #make_blobsは2つの値を返すため、一方は'_'で受け取っておいた data[:5]
Sample Dataの可視化
散布図でデータがどんな塩梅かみてみる
import matplotlib.pyplot as plt import matplotlib as mpl plt.scatter(data[:,0], data[:,1], color ='blue) plt.show()
ぱっと見でクラスターは2ぐらい(なんと面白くないものが生成されたのか。。。)
エルボー法でクラスター数を決める
データの可視化で検討を付けたクラスター数近傍に対して、エルボー法で実際の集合具合を計算する。
減少幅が低下する直前が理想的なクラスター数。
from sklearn.cluster import KMeans dist_list=[] for i in range(1,10): #'2'を含む前後の結果をみたい km = KMeans(n_clusters=i, random_state=0, init='random') #init='random'でK-meansにしてある。これを取り除くとK-means++ km.fit(data) dist_list.append(km.inertia_) plt.figure(figsize=(10,6)) plt.plot(range(1,10), dist_list, marker='+') plt.show()
最適なクラスター数を使った結果の確認
クラスター数2の結果を確認する
mearge_data=[] km = KMeans(n_clusters=2, random_state=0, init='random') km.fit(data) y_pred = km.predict(data) mearge_data = pd.concat([pd.DataFrame(data[:,0]), pd.DataFrame(data[:,1]),pd.DataFrame(y_pred)],axis=1) mearge_data.columns = ['feature1', 'feature2', 'cluster'] ax=None colors = ['blue', 'green'] for i, dd in mearge_data.groupby('cluster'): ax=dd.plot.scatter(x='feature1', y='feature2',ax=ax,color=colors[i], label=f'cluster{i}') plt.show()
きれいにできました