フルスタックエンジニアを目指す|株式会社ナンバーワンソリューションズ

フルスタックエンジニアを目指す

AI

機械学習の代表的な手法(分類問題編part2)

更新日:

前回は今回は機械学習の基本である代表的手法である分類問題・回帰問題・クラスタリングのうち分類について書きました。今回はその続きで分類器について書いていこうと思います。

あるデータを特定のグループ群に分類するために用いるのが分類器です。分類器にはいろいろな種類があります。今回は代表的なものを紹介していきたいと思います。
①決定木
前回も用いた決定木。決定木とは教師あり学習の一つで樹木モデルと呼ばれる木構造を利用したアルゴリズムです。
例として生物の分類で説明してみます。まずある生物の分類を行うにあたりその生物に「脊椎」があるのか、ないのかで分類します。
もしない場合「足の数」で分類でき3対なら昆虫類、5対なら甲殻類に分類できます。また脊椎ありの場合「呼吸方法」でさらに分類できエラ呼吸なら魚類、エラ+肺呼吸なら両生類、肺呼吸ならさらにプラスの条件で分類していく。このように分岐を繰り返していくモデルのことをいいます。
決定木のメリットとしては
〇分類ルールを樹木モデルとして可視化できることより分類の解釈が容易、ルールの編集も可能であること
〇学習のための計算コストが低い
ことがあげられます。しかしデメリットも当然あり
〇過学習になりやすい
〇扱うデータの特性によって樹木モデルを生成することが難しい
ことがあげられます。

②Random Forest
アンサンブル学習と呼ばれる学習法の一つです。アンサンブル学習とはいくつかの性能の低い分類器を組み合わせることにより性能の高い分類器を作成する手法のことをいいます。
さらにアンサンブル学習の中でも分類器作成方法によって「バギング」と「ブースティング」に分けることができます。
バギングとは学習データを抜けや重複を許して複数グループに分割、それぞれに弱い分類器を作成します。分類時はそれぞれの分類機の出力結果の多数決をとる方法です。
ブースティングとは複数の弱い分類器を用意し、重み付きの多数決で分類を実現する方法です。ある分類器が間違ったデータを難易度の高いデータとし、難易度の高いデータ抽出と難易度の高いデータに特化した分類器の重みの計算を反復することで重みを最終的に決めていきます。

ここでRandom Forestの話に戻りますがRandom Forestはバギングに分類する手法になります。Random Forestは
〇学習、判別の処理が高速、学習データのノイズにも強い
〇分類だけでなく回帰やクラスタリングにも使える
という特徴があります。ただ学習データが少ないと過学習になる危険性もあります。

それではPart1の内容をRandom Forestを使ってやってみましょう

結果私の環境では
Accuracy:0.9230769230769231
Confusion matrix:[[66 9]
[ 2 66]]
Precision:0.9705882352941176
Recall:0.88
F-measure:0.9230769230769231
という結果になりました。これはPart1の結果に比べ良くなっているように思われます。

③AdaBoost
AdaBoostも同じくアンサンブル学習になりこちらはブースティングに分類される手法です。
ではこちらもPart1の内容でやってみましょう

結果
Accuracy: 0.916083916083916
Confusion matrix:[[63 12]
[ 0 68]]
Precision: 1.0
Recall: 0.84
F-measure: 0.9130434782608696
となり同じくPart1の時よりも改善されています。classifier = ensemble.AdaBoostClassifier(base_estimator=estimator, n_estimators=20)でAdaBoost用の分類器を生成し、
ensemble.AdaBoostClassifierのパラメータに設定しています

④サポートベクターマシーン(SVM)
最後にサポートベクターマシーン(以下SVM)についてです。SVMでは2つにデータを分割する直線を複数とれる場合に分割線から最近傍データまでの距離の2乗の和を最大化する直線が1番このましいと考える方法です。SVMは
〇学習ノイズに強い
〇分類性能が非常に高い
〇ほかのアルゴリズと比較し学習データの数を多く必要としない
のが特徴です。しかし
〇分類処理速度がほかのアルゴリズムよりも遅い
〇基本的に2クラス分類になるため他クラス分類を行うためには複数のSVMを組み合わせる必要がある
ことが課題です。
ではPart1の事例で見てみましょう

結果
Accuracy: 0.9370629370629371
Confusion matrix: [[66 9]
[ 0 68]]
Precision: 1.0
Recall: 0.88
F-measure: 0.9361702127659575
とこれまでで非常に高い結果となりました。

2回に分けた分類問題について書いていきました。scikit-learnを使うことで分類問題を比較的簡単に行うことができました。あらためてライブラリーの強さ、先人の知恵に感謝ですね。
次は回帰問題について書いていきます

-AI

Copyright© フルスタックエンジニアを目指す , 2019 All Rights Reserved Powered by STINGER.