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