け】クラスタリング手法「k-means」について解説2021.08.10機械学習の入門書などを読んでいると度々見かけるk-means。本を読み進めていくとk-meansの他にk近傍法などkがつく用語が度々出てきて紛らわしいですよね。k-meansはクラスタリングの手法の中でも代表的な手法の一つ。AI(人工知能)を実装するエンジニアでなくてもこれを使えるだけで手元にあるデータからできることの幅を増やしていくことができます。この記事ではk-meansについてそもそもクラスタリングとは何かというところから解説をし、Pythonで実際に動かしていけるのを目指していきます。今回使用するのは新型コロナ対策をめぐるオープンデータ。これを機に新聞やテレビなどと違ったアプローチから情報を得られるようにもしていきましょう。中村それではまず、そもそもクラスタリングとは何かというところからお伝えします。目次まずはクラスタリングとは階層的クラスタリングと非階層的クラスタリングの違いk-meansのアルゴリズムk-meansのメリットデメリットk-meansをPythonで実装してみようまずはクラスタリングとはクラスタリングは与えられたデータの中から似たもの同士の集まり(=クラスタ)を作っていく手法。機械学習の中では教師なし学習にあたります。身近な事例としてあげられるのはECサイト。お客さんで似たような注文傾向のある人達でグループ分け、各グループの中で似たような商品への注文が頻繁にあった場合グループにいる他の人にも購入を勧めることになります。階層的クラスタリングと非階層的クラスタリングの違い似たもの同士を集めるクラスタリングですが「階層的クラスタリング」と「非階層的クラスタリング」のふたパターンがあります。両者の違いは分割するクラスタの数をあらかじめ決めるかどうか。事前に決めるのは非階層的クラスタリングの方となります。階層的クラスタリングは文字通りクラスタの階層を構築していく手法。データ同士で似たもの同士からまとめていく場合と逆に似てないもの同士で距離を取らせるといった方法があります。この手法であれば最終的な結果を樹形図を使って可視化することも可能です。対する非階層的クラスタリングは適切なグループ分けができるような関数を定義、計算の反復を通してグループ分けで最適なパターンを見つけ出すこととなります。k-meansのアルゴリズムここまでクラスタリングとは何か、階層的クラスタリングと非階層的クラスタリングの違いについて触れていきました。本題のk-meansは非階層的クラスタリングの中でも早い実行速度や拡張性に強みがあるもの。k-meansという名前にあるkはクラスタの数で実装の際に具体的な数字を決めていくことになります。k-meansのアルゴリズムで代表的な手順は以下の通り。最初のステップとしてデータの点からクラスタの数だけ適当な点を選択しそれらを重心とします。次にデータ点が重心とどれくらい離れているかを計算、距離が一番小さい重心のクラスタに所属することとなります。一通りクラスタが完成したらそれぞれに所属するデータ点の平均値を新たな重心として扱います。ここまでの流れでとりわけ大事なのがクラスタ作りと新たな重心の選定。この二つをステップ数の上限に到達するかクラスタに変化がなくなるまで繰り返されることになります。k-meansのメリットデメリットk-meansのメリットとしてまずはアルゴリズムが単純というのが挙げられます。やっていることは決められたクラスタ作りと新たな重心の選定を繰り返しで実装する側がやるのはクラスタの数を決めるだけ。単純であるおかげで計算負荷も小さいのでビジネスの場で膨大なデータを扱うことがあっても手早く計算させることができます。k-meansのデメリットとして挙げられるのは実行するごとに結果が変わってしまう場合があること。先程紹介したアルゴリズムの手順を振り返りましょう。最初のステップとしてデータの点からクラスタの数だけ適当な点を選びそれらを重心とする、それを基にクラスタ作りや重心の選定へ繋げることとなります。最初のクラスタがどう割り振られるかによって同じ条件でもその時々で全然違ったものになる場合も少なくありません。そのため同じ条件のものを繰り返し実行することで一番いい結果を採用したりさらに高度な手法を使うなどの検討も必要です。k-meansをPythonで実装してみよう最後にk-meansを実際に動かしてみましょう。今回はAnacondaよりJupyterLabを使用します。Pythonの環境構築をしよう」を参考にしてください。ここでは新型コロナウィルス対策として自治体ごとのワクチン接種の進捗状況をクラスタ化します。サマリー」を使用します。この記事では7月29日時点でのデータを使用しているので今後状況が代わり結果が変わってくる可能性もあるのでご注意ください。オープンデータと同じフォルダでJupyterLabを起動、使用するライブラリを読み込んでください。KMeansライブラリを読み込んだのでオープンデータを読み込んでいきます。データを読み込むことができました。ここでは1回目の接種回数、その中で2回目がまだの件数の分布を可視化します。y_max)plt.show()このグラフの横軸は接種1回目の回数、縦軸がそれに対し2回目の接種回数を引いたもので1e6は100万のことを指します。見で1回目接種が150万回未満、150万回以上250万回未満、250万回以上の3つで固まっているような印象。クラスタ数を3としてk-meansを動かしていきます。kmeans.fit(X)k-meansのモデルを訓練できたので出力の推定を行います。c=result.labels_)plt.show()当初想定していた150万回以上250万回未満と250万回以上はほぼ同じクラスタで400万回を超えている自治体一件のみが独立したものとして扱われているようです。object東京都の接種回数は他と比べても多くその分2回目の接種を待つ人も少ないということがわかりました。ここでは人口に対する接種率までは入れていないのでまた違った視点からの分析していくことも可能です。今回はクラスタリングの代表的な手法の一つであるk-meansにフォーカスを当てそもそもクラスタリングとは何かというところからPythonでの実装まで解説していきました。クラスタリングは与えられたデータの中から似たもの同士の集まり(=クラスタ)を作っていく手法で教師なし学習にあたります。クラスタリングには階層的クラスタリングと非階層的クラスタリングのふたパターンがありk-meansは後者に該当。指定したクラスタ数の基でクラスタ作りと新たな重心の選定を繰り返していきます。単純で計算が早いというメリットがある一方結果が安定しない場合もあるので注意が必要です。k-meansはPythonと手持ちのデータがあれば手軽に分析していくこともできます。このご時世だからこそ怪しい情報に惑わされず一次情報をうまく活用するきっかけにできるといいですよね。今回のコードはGitHubでも公開しているので参考にしてください。中村真裕とある出版関係の会社で広告枠などの営業をしていたところから転身、AI(人工知能)やデータサイエンスについて勉強中。AI(人工知能)をわかりやすく、身近に感じてもらえるような記事を書いていきます。特技は三味線で作曲家の方の新作に出演させてもらった経験があります。機械学習にすぐに使える!時系列データとその分析方法とは2021.10.302021.10.30人気記事ランキング人気記事は見つかりませんでした。検索トップタイトルとURLをコピーしました。