学習用記事Pythonによる非階層型クラスタリング(k-means法)非階層型クラスタリングの代表的手法である「k-means法」をPythonで実行してみます。k-means法の理論についてはこちらの記事をご覧ください。今回は理論編で使用したデータとほぼ同様の、以下のデータを用います。下記のようにファイルを読み込み、sklearn.clustar内のKMeansメソッドを用いれば非常に簡単に実行することができます。KMeans(n_clusters=3)vec.fit(df)print(vec.labels_)KMeansメソッドの引数「n_clusters」はクラス数です。クラス数は人間が決めなければいけません。今回は理論編との結果比較のため、3にしています。2]もう出てきましたね。「vec.fit(データ)」でK-meansが実行され、「vec.labels_」に予測クラスター番号が格納されます。ちなみに「vec.fit_predict(データ)」とすると、一気にクラスの予測まで完了します。結果には読み込んだデータの上から順番にクラスター番号が振られていますが、これでは何がどのクラスターになのか良く分かりません。分かりやすくしてみましょう。実行の度にクラスター番号は変わります。それだけでなく、稀に結果も異なる場合があります。K-means法は初期値をランダムに選ぶのでその影響ですが、デフォルトでは「K-means++」という、通常のK-means法よりパワーアップした手法で計算が行われており、実行の度に結果が変わる問題はそこまで起こりません。クラスターごとの結果集計まずは上記のクラスタリング結果をデータフレームに格納します。データ分析を行う時は、どんな時でもデータフレームに値を突っ込んでから処理するのが結果的に楽かなという気がします。CodePython1df["class"]=vec.fit_predict(df)とするだけです。2このようになります。なればクラスタごとの傾向などがすぐに計算できます。64.250000と集計できます。結果を見ると、「クラス0」は国語が得意なグループ、「クラス1」は算数が得意なグループ、「クラス2」はバランスが良いグループ、と考えられます。結果のグラフ化グラフ化もしてみます。enumerate(zip(X,Y)):plt.annotate(df.index[i],(x_name,y_name))plt.show()デザインはお好みで。結果は・・・きちんとクラスタ分けされているみたいです。項目数が3以上ある場合は、まず次元削減を使って、項目数を2に落としてからグラフ化してください。まとめK-means法は非階層型クラスタリングの代表格的手法です。Excelで実行するのは難しいですが、Pythonでは非常に簡単に実行できます。データをグループ分けしたい時には使ってみて下さい。階層型クラスタリングでは実行方法が異なりますので、別の記事にしています。読み物お役立ちツールホームお問い合わせ。