はじめに
連載「scikit-learnで学ぶ機械学習」を始めますに書いた通り、scikit-learnを用いて機械学習について学んで行きたいと思います。
本記事は、第2回「教師なし学習」です!
- 教師あり学習の概要
- 混合ガウス分布のコード
を解説していきたいと思います
前回の記事第1回「教師あり学習」がまだの方は、そちらもどうぞ!
教師なし学習とは
データの構造
まず、教師なし学習で扱うデータの構造について説明します。
教師あり学習の場合(復習)
教師あり学習のデータは二つの要素を持っていると説明しました。
それは
- 特徴量(説明変数、入力ベクトル)
- ラベル(目的変数、出力ベクトル)
でした
教師なし学習の場合
教師なし学習のデータは特徴量のみを持っています。
教師なし学習の目的
教師なし学習には
- クラスタリング
- 次元削減
などの種類があります。
クラスタリングは、データの特徴を捉えて集合(クラスタと呼ばれる)に分割するため
次元削減は、データを可視化したり圧縮するため
に用いられます。
ちょっと、難しいと思われた方も大丈夫です。
コードを動かしながら理解してみましょう。
コードを動かそう
分類問題は教師あり学習のタスクとしてもよく取り上げられますが、
クラスタリングでも解くことができます。
混合ガウス分布モデルを用いたクラスタリングで、簡単な分類問題を解いてみましょう。
コードの全体像
先に、完成後のソースコードを貼り付けておきます。
1 | from sklearn.datasets import load_breast_cancer |
順に解説をしていきます。
乳がんデータセットのインポート
前回に続いて、今回もbreast_cancer
という乳がんのデータセットを利用します。
breast_cancer
には細胞核の情報とその診断結果(悪性腫瘍か良性腫瘍か)が記録されています。
1 | from sklearn.datasets import load_breast_cancer |
1 |
|
混合正規分布モデルは、複数の正規分布の重ね合わせでデータの分布を捉えるモデルです。
今回でいうと、正規分布の一つの山がクラスタ(悪性腫瘍か良性腫瘍か)に相当します。
Xに特徴量(説明変数、入力ベクトル)を代入
1 | X = breast_cancer.data |
全部で569サンプル、特徴量の数は30です。
yにラベル(目的変数、出力ベクトル)を代入
1 | y = breast_cancer.target |
混合正規分布モデルのインスタンスを作成
1 | gmm = GaussianMixture(n_components=2) |
この時、n_components
として、クラスタ数を指定します。
breast_cancer
は悪性腫瘍か良性腫瘍かの二択ですので2
を指定します。
今回のように、設定すべきクラスタ数がわかっている場合は良いですが、
そうでない場合はクラスタの推定を行うこともあります。
モデルの学習と予測を行う
1 | pred = gmm.fit_predict(X) |
教師なし学習ですので、引数にX
のみを与えているのがポイントです。
これだけで、データの分類が行えてしまいます。
評価を行う
予測と正解が一致しているかを全てのテストサンプルについて確認し、平均をとります。
ただし、0
と1
を逆転して割り当てている可能性があるので、二つの結果を表示します。
1 | print ((pred == y).mean(), (pred != y).mean()) |
両者の最大値をとると、おおよそ95%程度の正解率となっているのではないでしょうか。
(教師あり学習(ロジスティック回帰)では96%でした)
このように、クラスタリングという全くラベル情報を与えないアルゴリズムでも、
簡単な分類問題であれば解けてしまうのです。
続き
記事情報
- 投稿日:2020年3月3日
- 最終更新日:2020年3月7日