LoginSignup
36
32

More than 5 years have passed since last update.

機械学習 トレーニングデータの分割と学習・予測・検証

Last updated at Posted at 2017-02-22

機械学習を、 PyData.Tokyoのチュートリアル#1 を元に勉強したり、教えていると、トレーニングデータの分割から、学習・予測・検証の部分がわかりにくいと感じています。
この部分の解説をします。

前提条件

  • 教師あり学習を行う -> つまりラベル付きデータがある
  • データセットはある程度の数がある -> このチュートリアルでは、890件
  • テストデータを 20% 残して学習し検証する
  • 特徴行列は多次元(当たり前のことだが・・)
  • sklearn(scikit-learn)を使う
  • ロジスティック回帰で推定を行う
  • 詳細のコードは、PyData.Tokyoのチュートリアル#1pydatatokyo_tutorial_ml.ipynb を参照のこと

トレーニングデータの分割

特徴行列を X
クラスラベルデータを y
としたときに、以下のように行うと、データ分割が可能

from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(X, y, train_size=0.8, random_state=1)

機械学習データの分割2.png

  • X_train : 学習用特徴行列 (80%)
  • X_val : 評価用特徴行列 (20%)
  • y_train : 学習用クラスラベル (80%) 未知のデータ
  • y_val : 評価用クラスラベル (20%) 未知のデータの答え合わせに使う (隠し持っておく)

学習・予測・検証

分類器(学習器)の初期化

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()

clf を初期化して、以下の学習・予測・検証に使っていきます。

学習

clf.fit(X_train, y_train)

初期化されたclfのfitメソッドを使って、学習させる
データは80%の学習用データに特徴行列とクラスラベルを与える

予測

y_train_pred = clf.predict(X_train)
y_val_pred = clf.predict(X_val)

clfのpredictメソッドで予測をします。

  • y_train_pred : 学習用データで改めて予測を行った結果
  • y_val_pred : 評価用データで予測を行った結果

ここまで、 y_val を使っていない。つまり、 y_train が未知データとして扱われている

評価・検証

from sklearn.metrics import accuracy_score
train_score = accuracy_score(y_train, y_train_pred)
val_score = accuracy_score(y_val, y_val_pred)

accuracy_score には、 クラスラベルデータ上記の予測結果 を与え、正答率を出力

  • train_score : 学習用データで予測を行った結果
  • val_score : 評価用データで予測を行った結果 未知のデータで予測を行ったことになる
36
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
32