教師あり学習・ホールドアウト法
ホールドアウトって 〔腕を〕伸ばす・〔手に何かを持って相手に~を〕差し出す、提供する、提出する・〔最後まで〕持ちこたえる、辛抱する、粘る、耐える、抵抗する・〔食糧が〕もつ・〔希望を〕抱かせる 言わないでいる、約束する
と辞書に出てくるけど、このG検定でいうところのホールドアウト法は、
「データ全体を学習用データとテストデータに分割し、モデルの精度を確かめる手法。」
ということらしい。
例えばデータ全体が100個ある場合、6対4の割合で分割し、学習用データを60個、テストデータを40個に分割します。
教師ありデータを「学習データ」と「テストデータ」に分割する。
学習データでモデルを作成し、テストデータで性能を図る。
※より効果的な方法として、データを学習データ、検証データ、テストデータと3つに分割し、検証データによって複数のモデルを評価・選択して最終的にテストデータで汎化誤差を評価する方法がある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from sklearn.datasets import load_breast_cancer #サンプルデータ取得用 from sklearn.linear_model import LogisticRegression #ロジスティック回帰用ライブラリ from sklearn.cross_validation import train_test_split #交差検証用ライブラリ from sklearn.metrics import accuracy_score #正答率算出用ライブラリ # 分析対象データを取得 data = load_breast_cancer() X = data.data y = data.target # データを取得して分割(学習用7:テスト用3) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) #ロジスティック回帰モデル作成 lr = LogisticRegression() lr.fit(X_train, y_train) # 学習データに対する正答率を出力 print('Training accuracy:', lr.score(X_train, y_train)) # テストデータに対する正答率を出力 print('Test accuracy:', lr.score(X_test, y_test)) |
Cross Validation(クロスバリデーション法)
別名、K-分割交差検証と呼ばれます。
K-分割交差検証では、データ全体をK個に分割します。
そして、そのうちの1つをテストデータとし、残る K-1 個を訓練用データに分解します。
その後、テストデータと学習用データを入れ替えて繰り返し、全てのケースがテスト事例となるよう検証を繰り返します。
すなわち、K 個に分割されたデータはK 回の検証が行われることになります。
このようにして得られた結果を平均してモデルの精度を確かめます。
Leave One Out(リーブワンアウト法)別名:一つ抜き法,ジャックナイフ法
Cross Validation(クロスバリデーション法)に似ていますが、Leave One Out(リーブワンアウト法)とは、データ全体のうち1つだけをテストデータとする方法です。
その後、テストデータと学習用データを入れ替えて繰り返し、全てのケースがテスト事例となるよう検証を繰り返します。
このようにして得られた結果を平均してモデルの精度を確かめます。
最適な学習用データとテストデータの分割の方法
Leave One Outは1つずつ分解するので精度は高くなりやすいですが時間が非常にかかります。
それとは逆にHold-out(ホールドアウト法)の場合はデータにばらつきがある場合は高精度が出しにくいですが、時間は短時間で済みます。
このように手持ちのデータサンプル数によって使い分ける必要性があります。
データサンプル数が10個以下の場合
手持ちのデータが10個以下の場合はサンプル数が少なすぎるため、どの手法を用いても効果は期待出来ません。
本当に機械学習、ディープラーニングを行う必要があるのか見直す必要があります。
データサンプル数が100個以下の場合
Leave One Out(リーブワンアウト法)が有効ですが、サンプル数がまだ少ないため、モデルの精度はあまりよくなりません。
データサンプル数が1,000個以下の場合
Cross Validation(クロスバリデーション法)で10分割(10-fold cross validation)が丁度いいです。
Leave One Out(リーブワンアウト法)も件数によっては有効ですが、その分時間はかかります。
データサンプル数が1,0000個以下の場合
Cross Validation(クロスバリデーション法)で10分割以内か、Hold-out(ホールドアウト法)を使用して検証する必要があります。
また、この量の学習サンプル数となると、マシン性能のスペックや処理の非常に重要となってきます。
データサンプル数が1,00000個以下の場合
この量になると、Hold-out(ホールドアウト法)以外は無理です。
またマシン性能スペックやアルゴリズムが非常に大事となってきます。
データサンプル数がこれ以上の場合は、Hold-out(ホールドアウト法)でも難しくなり、またマシン性能のスペックも超高性能が必要となります。
研究施設等での超最先端な技術を持ち合わせてなければ出来ないレベルとなります。
コメント