概要
最近データサイエンスやデータ分析を学習しているので、そこで学んだことを備忘としてここに書き残していこうと思います。
学習した順番は前後しますが、今回はクラスタリングについて学んだことを整理したいと思います。
学んだことを思い出しながら書いているので、間違ったことを書いていたらご指摘ください!
※最近効率の良い学習方法に「アクティブリコール」という物があると知り、早速実践をしていますw
クラスタリングとは
クラスタリングとはデータの類似性に基づいてデータを自動的にグルーピングすることです。
人間がデータをグルーピングすると主観が入ったりして、データの偏りが発生してしまう可能性があります。(このような偏りをバイアスと言います。)
クラスタリングでは「自動的に」データをクラスタリングするので、グループ分けされたデータの塊を人間側でどういった意味があるのかを解釈する必要があります。
しかしそれによってデータに隠れている類似性や関連性を見つけることができたり、別の視点からデータにアプローチすることができたりします。
クラスタリングのアルゴリズム
クラスタリングにはいくつか種類があるようですが、私が今回学習したのは「K-平均法(K-Means)」なので、こちらのアルゴリズムの概要について整理します。
以下がアルゴリズムの流れです。
- Step1: データの散布図にセントロイドを配置する
- Step2: セントロイドとデータの距離に基づいてセントロイドとデータを紐付ける
- Step3: 紐付けたデータの塊(クラスタ)を基に重心を求めて、重心にセントロイドを移動する
- Step4: 移動後のセントロイドとデータを再度紐付けしなおす
- Step5: セントロイドが動かなくなるまでStep2~Step4を繰り返す
セントロイドの数=クラスタの数になります。
そしてクラスタの数は予め決める必要があります。
クラスタの数は決め打ちで決めても良かったりしますが、数学的にデータに対して最適なクラスタ数を求めることができます。
エルボー法や残差平均和というものを用いることで求められるようですが、今回は詳細については割愛します。
Pythonでクラスタリングを実装する流れ
Pythonでクラスタリングを実装する時の流れについて簡単におさらいします。
流れさえわかればあとはググるなりChatGPTに聞くなりで実装できるかなと思いますので、具体的なコードは書きません。
- データを読み込む(DataFrame型)
- データをndarray型に変換する
- クラスタリングのモジュールをインポートする
- インスタンス化する
- クラスタ数を決める
- 乱数を決める
- 2のデータに対してモデルの学習をする
- 1のデータに学習後に算出したクラスタの値をマージする
- クラスタの値の代表値を確認する
- データを可視化しクラスタの特徴を確認し、解釈する
まとめ
以上が今回学習したクラスタリング(K-平均法)の知識整理です。
要するにクラスタリングを用いることで、データ全体を見て類似性を基にデータをグループ分けできるようになります。その時に人間によるバイアスがかからないため、潜在的な関連性や類似性を見つけることに繋がり、新しい角度からデータを見ることができます。
主成分分析についてちゃんと理解できていないので、次回はそれについて学び直して備忘として書き殴ろうかと思います。
ではまた。