ここでは教師なし学習の一例として作成したクラスタリングのプログラムの動作を解説していきます。
make_blobs() サンプルデータの生成
今回このメソッドはサンプルデータを作成するために使いました。
n_samples: 生成するサンプルの総数
centers: クラスターの中心の数
random_state: データセット作成のための乱数生成を決定します。 この数字を決めることで何回やっても同じ点群が生成されます。
cluster_std: 中心からの距離の標準偏差
さて、この結果どのような配列ができたのでしょうか?
変数の中をのぞいてみましょう。
まず配列xをのぞいてみると2組の座標が生成されていることがわかりますね。その2組の座標がそれぞれどのクラスターに対応しているかが配列yに表示されています。配列yが今回のサンプルデータセットの「答え」になります。
ただ今回のプログラムは教師なし学習なのでyの配列は使いません!
fit() で学習
predict() で予測
上の2つはscikit-learn(機械学習5よくに使われるライブラリ)を使っていく上でまず把握するべきものです!これを見ると9行目で「model」の学習、11行目で予測を行っていることがわかりますね!
では今回どのようなモデル(model)を作って学習、予測したのでしょうか??
Kmeans() 非階層的クラスタ分析(K-平均法)
今回のモデルはK-平均法と呼ばれる手法を用いてサンプルデータを分析しました。この方法の手順は以下の通りです。
- 初期値として各点をランダムに、それぞれのクラスタに割り振る
- 各クラスタの中心点を計算し、すべての点を一番近い中心点のクラスタに振り分け直す。
- 新しく割り振られた各クラスタの中心点を再度計算し、すべての点を一番近いクラスタに分類しなおす。
- 変化が無くなるまで2~3を繰り返す。
結構単純な作業ですよね?ただこれを手計算やExcelなどやろうとすると膨大な時間がかかってしまうのは予想できます。これを自動で素早く行ってくれるのが今回使用したKmeans()です。ではそれぞれの引数の役割を見てみましょう。
n_clusters: データをいくつのクラスタに分類するか。
random_state: 初期値の作成のための乱数決定します。 この数字を決めることで何回やっても同じ初期値が生成されます。
max_iter: 上記の2~3を最大何回反復させるかを決定する。今回みたいに指定しない場合は300回となります。
【Let's play around with the numbers!】
プログラムがどのように動いているかを理解する上で一番大事なのは変数やパラメーターを変えて遊んでみることです。
例えば今回サンプルデータ生成の段階では5つのグループに分かれるように乱数を用いて作成しました。ではKmeans()のクラスタの数を8としてみたらどうなるでしょうか?
予想して実行してみてください・・・
どうでしょう、だいたい予想通りでしょうか?上がクラスタの数を5つにした場合で下が8つにした場合です。プログラムが無理くり8個に分けてくれたことがわかりますね!
今回は教師なし学習の一例としてK-平均法を用いたクラスタリングを行いました。
皆様も是非実際にプログラムを動かしてみてください!
コードは下からコピペして使ってくださいね!