シェアする

[Qiita転載]sciket-laernのiris・cancerデータセットに色々なクラス分類アルゴリズムを一気に適用してみる

6fc1b22c-e027-34f6-fcb9-f7c800fea266

出典

Qiitaに投稿した記事の転載です。クラス分類おもろい!(^^)!

動機

Pythonによる機械学習
の第2章で紹介されている、教師あり学習クラス分類アルゴリズムを実際に試してみたかったので投稿。
とりあえず動けば良いやの精神で書いているので、コードが汚い点は無視してください!(^^)!

今回実行してみた教師あり学習アルゴリズムの一覧

書籍本文より抜粋。

1. 最近傍法

小さいデータに関しては、良いベースラインとなる。説明が容易。

2. 線形モデル

最初に試してみるべき、アルゴリズム。非常に大きいデータセット、非常に高次元のデータセットに適する。

3. ナイーブベイズ

クラス分類にしか使えない。線形モデルより更に高速。非常に大きいデータセット、高次元データ
に適する。線形モデルより精度が劣ることが多い。

4. 決定木

非常に高速。データのスケールを考慮する必要がない。可視化が可能で説明しやすい。

5. ランダムフォレスト

ほとんどの場合単一の決定木より高速で、頑健で、強力。データのスケールを考慮する必要が
ない。高次元の疎なデータには適さない。

6. 勾配ブースティング決定木

多くの場合、ランダムフォレストより少し精度が高い。ランダムフォレストより訓練に時間がかかるが、予測はこちらの方が早く、メモリ使用量も小さい。ランダムフォレストよりもパラメータに敏感。

7. サポートベクタマシン

同じように意味を持つ特徴量からなる中規模データセットに対しては強力。データのスケールを考慮する必要がある。パラメータに敏感。

8. ニューラルネットワーク

非常に複雑なモデルを構築できる。特に大きなデータセットに有効。データのスケールを調整する必要がある。パラメータに敏感。大きいモデルは訓練に時間がかかる。

データセットの準備

scikit-learnのirisデータセット

アイリスの花の、花弁の長さと幅、ガクの長さと幅を特徴量に、3種の花の種類を教師ラベルとして持つ、150行のデータです。

出力:
キャプチャ.PNG

出力:
ダウンロード.png
各特徴量をペアプロットしてみると、綺麗に分類されているので各アルゴリズムも上手く機能しそうです。

scikit-learnのbreast_cancerデータセット

がん検診患者の診断情報30個を特徴量に、対象患者がガンであるか否かを教師ラベルとして持つデータです。

cancerdata.PNG
30列あるので、途中で切れています。

これらのデータセットに対して、分類アルゴリズムを適用していきます。

分類アルゴリズムを適用する – ①インスタンスの生成

まずは、分類アルゴリズムのインスタンスを初期化パラメータと共に生成。alg配列に入れる。

分類アルゴリズムを適用する – ②実行関数を呼び出す

結果

出力グラフ

赤色 => iris 青色 => cancer
上 => 訓練データ 下 => テストデータ
横軸->アルゴリズムの種類 縦軸 => 正解率
左から、[“k(K-最近傍)”,”logi(ロジスティック回帰)”,”tree(決定木)”,”rand_tree(ランダムフォレスト)”,”grad_tree(勾配ブースティング決定木)”,”svm(サポートベクタマシン)”,”nnw(ニューラルネットワーク)”]

ダウンロード (2).png

感想

  • パラメータ調整・データの前処理を一切していない状態だと、やはり決定木ベースのアルゴリズムが強い。
  • ニューラルネットワークとSVMはデータの前処理が必須と本に書いてあったので、標準化するとまた違う結果になったかも。

以上です。

Android版ストア配信中!

トクチエAndroid版ストア配信中!

smartmockups0

スポンサーリンク
プッシュ通知を受け取る
プッシュ通知を受け取る

シェアする

フォローする

スポンサーリンク