クラスタリング k-means法
欠損データを埋め合わせるためにも使える?
点がまばらに存在しているとき。
点の分布を「まとまり」で見ることができます。
一つ一つの点が「重さ」を持っているとして、「まとまり」の重心がもとまります。
ある点がどの「まとまり」に所属するかを、その重心との距離で計算してくれる。らしい。
データが「似ているもの」を集めてくれる、らしい。
コマンド
# k-means法を使うためのインポート from sklearn.cluster import KMeans # データ取得のためのインポート from sklearn.datasets import make_blobs # サンプルデータ生成 # 注意:make_blobsは2つの値を返すため、一方は使用しない「 _ 」で受け取る X, _ = make_blobs(random_state=10) # グラフを描画 # colorのオプションで色付けができる plt.scatter(X[:,0],X[:,1],color='black') # KMeansクラスの初期化 n_clustersはクラスターの数、initでKMeans以外のクラスターの作り方を指定できる。 kmeans = KMeans(init='random', n_clusters=3) # クラスターの重心を計算 kmeans.fit(X) # クラスター番号を予測 y_pred = kmeans.predict(X) # concatでデータを横に結合(axis=1を指定) merge_data = pd.concat([pd.DataFrame(X[:,0]), pd.DataFrame(X[:,1]), pd.DataFrame(y_pred)], axis=1) # 上記のデータにて、X軸をfeature1、Y軸をfeature2、クラスター番号をclusterと列名指定 merge_data.columns = ['feature1','feature2','cluster'] # クラスタリング結果のグラフ化 ax = None colors = ['blue', 'red', 'green'] for i, data in merge_data.groupby('cluster'): ax = data.plot.scatter(x='feature1', y='feature2', color=colors[i], label=f'cluster{i}', ax=ax)
これh
クラスターの数を的確に指定するには?
エルボー法という方法があるそうです。

k-meansの最適なクラスター数を調べる方法 - Qiita
背景お手軽なクラスタリング手段としてk-meansが有名であるが、以下の様な困ったポイントがあるk-means法の問題点の一つは、クラスタの個数kを指定しなければならないことだ。クラスタリング…
# エルボー方による推定。クラスター数を1から10に増やして、それぞれの距離の総和を求める dist_list =[] for i in range(1,10): kmeans= KMeans(n_clusters=i, init='random', random_state=0) kmeans.fit(X) dist_list.append(kmeans.inertia_) # グラフを表示 plt.plot(range(1,10), dist_list,marker='+') plt.xlabel('Number of clusters') plt.ylabel('Distortion')
このコマンドの意味がよくわからないが、結果は出る。
「適切な分類」のためのシックハックをせざるをえないのだなぁと思う。
主成分分析
コメント