Scikit-Learnの識別器をループで一気に適用させる
今回はScikit-Learnを用いて様々な識別器を一括で適用してみます。
普通、Scikit-Learnで識別器を試す場合、一つ一つの識別器に対してfit関数で学習を行い、predict関数で予測を行い、score関数で評価を行ったりしますが、その手順が面倒だったために、ループで一括で回して評価するプログラミングを説明します。
使用する識別器
以下の識別器を使用してみます
- ロジスティック回帰(LogisticRegression)
- k近傍法(k-Nearest Neighbors)
- 決定木(Decision Tree)
- サポートベクターマシン(線形)(Support Vector Machine(linear))
- サポートベクターマシン(非線形)(Support Vector Machine(rbf))
- ランダムフォレスト(Random Forest)
- パーセプトロン(Perceptron)
- 多層パーセプトロン(Multilayer perceptron)
検証データ
機械学習でよく用いられるアヤメの分類データのデータセットを使用します。
アヤメの分類とはscikit-learnライブラリに同梱されており、がく片の長さ、がく片の幅、花びらの長さ、花びらの幅の4つの説明変数からアヤメの品種を特定するデータセットです。アヤメの品種とは「setosa」、「Versicolour」、「Virginica」の3種類です。
がく片の長さ、がく片の幅、花びらの長さ、花びらの幅の4つの説明変数変数と、アヤメの品種の対応関係は次の通りです。赤、青、緑がそれぞれ「setosa」、「Versicolour」、「Virginica」のアヤメの品種に対応します。
前処理について
プログラムを簡単にするために、正規化や標準化などの前処理は一切行っていません。
150個のデータセットを7:3の割合で訓練用データと評価用データに分割しています。
では、さっそくやっていきましょう
プログラム
各種ライブラリのImport
[crayon-678b34987f20b752997583/]
必要なライブラリをインポートします。
アヤメの分類のデータセットのダウンロード
[crayon-678b34987f212183842260/]
scikit-learnライブラリに同梱されているアヤメの分類のデータセットをダウンロードします。ダウンロードしたデータはdataという名のデータフレームに格納しています。
説明変数と目的変数の設定
[crayon-678b34987f215384458791/]
dataのデータフレームから説明変数となるデータを抜け出しdataXという名のデータフレームに格納しています。
[crayon-678b34987f218774211588/]
続いて同じようにdataのデータフレームから目的変数となるデータを抜け出しdataYという名のデータフレームに格納しています。
訓練データと評価用データの分割
[crayon-678b34987f21a048135783/]
7:3の割合で訓練用データと評価用データに分割するためtrain_test_split関数でデータを分割しています。
これで準備が整いました。
Scikit-Learnの識別器をループで一気に適用
[crayon-678b34987f21c867875860/]
[crayon-678b34987f21f887816040/]
早速、ループでScikit-learnでの識別子を回してみます。modelsというリストを用意し、その中にScikit-learnでの識別子を次々と追加していきます。全ての識別子を追加した後に、modelsのリスト分ループしてfit関数での学習を行っています。今回はハイパーパラメータの変更はなく全てDefaultでループさせています。同時にscore関数での評価を実施しています。
結果表示
[crayon-678b34987f225164757047/]
全ての評価が完了したためにスコアを一覧で表示してみます。
まとめ
データセットは用意したものの、どの識別器を使用していいのか分からない場合や、初期設定である程度高い結果を出力する識別器をとりあえず知りたいという場合はこの方法が使えます。また、今回は割愛しましたが、グリットサーチも組み合わせることで、より良い精度の高い予測するハイパーパラメータを探すことができます。