【機械学習】Scikit-Learnで交差検証(Cross-Validation)の実装

こんにちは。本日は、Scikit-Learnを使って機械学習モデル構築時の交差検証を実装する方法をご紹介いたしますす。(交差検証の理論は分かっている前提で話を進めます)

sklearn:cross_val_score()関数の仕様

これ、cross_val_score()という関数を使ってなんと1行で実装できてしまうんですね・・恐ろしく便利・・・

以下が、引数の一覧です。この関数の返り値は下の引数で設定するscoreになります。

sklearn.model_selection.cross_val_score(estimator, X, y=None, *, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, fit_params=None, pre_dispatch='2*n_jobs', error_score=nan)

引数について、一つづつ確認していきます。

  • estimator:学習器を持つ(fit関数を持つ)オブジェクト
  • X:学習データ(array, listでも良い)
  • y:教師あり学習を行う場合の正解データ
  • groups:GroupKFoldを行う場合の層化指標
  • scoring:評価指標
  • cv:Cross-ValidationのFold数(scikit-learn ver0.22よりデフォルトが5(以前は3)になりました)
  • n_jobs:利用するCPU数(デフォルトは1。-1を指定すると、全てのCPUを利用する)
  • verbose:何ステップおきに学習状況を出力するか
  • fit_params:estimatorに渡すパラメータ
  • pre_dispatch:並列実行時の起動ジョブ数(少ない方がメモリ消費は抑えられる)
  • error_score:エラー発生時にエラーをraiseするか(’raise’を設定)

Python実装

毎度おなじみ、タイタニックのデータを用いて実装します。

from sklearn import svm
from sklearn.model_selection import cross_val_score

## 読み込み
df_train = pd.read_csv(PATH+'train.csv')
df_test = pd.read_csv(PATH+'test.csv')

## 特徴量エンジニアリング(詳細割愛)
df_train_fe = feature_engineering(df_train)
df_test_fe = feature_engineering(df_test)

## モデリング(サポートベクターマシン)
exclude_columns = [
    'Name',
    'Ticket',
    'PassengerId',
    'Survived'
]
features = [c for c in df_train_fe.columns if c not in exclude_columns]

svc = svm.SVC()

## Cross-Validation
score = cross_val_score(svc,df_train_fe[features],target,scoring='roc_auc',cv=5, n_jobs=-1)
print(score)

実行結果

CV=5としたので、各Foldのroc_aucの値が返ってきています。

[0.84426877 0.82727273 0.84237968 0.80855615 0.8931658 ]

以上、自分でKFold/GroupKFoldのコードを組まなくても簡単に交差検証を実装する方法でした!

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US

Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。