DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

scikit-learn 勉強ノート(2)

前回から大分間が空きましたが、scikit-learnの勉強メモです。
おさらいすると、サンプルとしてIrisデータセットを使い、アヤメの品種を分類していたのでした。
データセットは、がく片や花びらの長さが記録されたXと正解ラベルが記載されたyに分かれています。
これを分割して、

  • X_train, y_train

  • X_test, y_test

の2ペアにし、trainデータで学習して、testデータで正解率を見る、というのが流れです。

前回はRandom Forestモデルを使いましたが、今回はsvmモデルを使用することにします。

from sklearn.svm import LinearSVC
svc = LinearSVC()

さて早速学習しましょう…と言いたいところですが、ここで注意点。
Random Forestは特例で、データが数値データであろうがカテゴリデータであろうが、また桁違いのデータが混在していようが、一切構わず、そのまま投げ込んでも結果が出てしまいます。
機械学習のモデルの中では例外中の例外と言ってよく、他のモデルは

  • そもそもカテゴリデータは(そのままでは)扱えない

  • データのスケールが違う場合は、同じスケールになるよう変換する必要がある

ことが殆どです。
今回使うSVMも、これに該当します。手作業で変換するのは御免なので、ライブラリを使います。
SVMではMinMaxScalerを使うそうなので、早速インポートしましょう。

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaler.fit(X_train)

学習のときと同じで、.fitメソッドを訓練データに適用します。
後の流れもよく似ています。

X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)

これで、同サイズに変換されたデータが手に入りました。 あとは

svc.fit(X_train_scaled,y_train)
svc.score(X_test_scaled,y_test)

とするだけです。scikit-learnは異なるモデルでも同じようなインターフェースを持っているので、一度基本を学ぶと色んなモデルを試してみることが出来ます。

例えばロジスティック回帰なら、

from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(X_train_scaled, y_train)

logreg.score(X_test_scaled, y_test)

と、殆ど同じコードで比較が出来ます。
実際にはもちろん、モデル毎に意味合いの異なるパラメータをいじる必要がありますが、モデルの比較が簡単に出来ていいですね。