クロス検証(Cross Validation)


Sklearnライブラリにおけるクロス検証に関する資料
http://scikit-learn.org/stable/modules/cross_validations.
クロス検証(Cross Validation)は、分類器の性能を検証するための統計分析方法の基本的な考え方である.元のデータをグループ化し、一部はトレーニングセットであり、他の部分は検証セットである.まず、トレーニングセットで分類器を訓練し、検証セットを利用して得られたモデルをテストし、これを分類器の性能指標を評価する.一般的なCV方法は以下の通りである.
1)Hold-Out Method方法:元のデータをランダムに二つのグループに分け、一つはトレーニングセットとして、一つは検証セットとして、トレーニングセットを利用して分類器を訓練し、検証セット検証モデルを利用して、最後の分類精度を記録します.これはHold-OutMethodの下で分類器の性能指標です.Hold-OutMethodはK-fold Cross Validationに対してDouble cross-validationとも呼ばれています.またはK-CVに対して2つのfold cross-validation(2-CV)と呼ばれています.利点の処理は簡単で、元のデータをランダムに二つのセットに分けるだけでいいです.厳密にHold-Out MethodはCVとは言えません.ランダムに元のデータをグループ化するので、最終的な検証セットの分類精度の高さは元のデータのグループと大きな関係があります.(主な原因はトレーニングセットのサンプル数が少なすぎて、母体サンプルの分布を代表するのに足りないため、test段階の視認率に明らかな落差が生じやすいということです.また、2-CVの中で二分された分子集合法の変異度が大きく、「実験過程は複製されなければならない」という要求を達成できないことがよくあります.)
2)K-fold Cross Validation(K-CVと表記)方法:kクロス検証は元のデータをKグループに分け(一般的には均等)、各サブセットのデータをそれぞれ一回の検証セットにし、残りのK-1セットのサブセットデータをトレーニングセットにして、Kモデルを得る.このKモデルの最終的な検証セットの分類精度の平均数をこのK-CVの下分類器の性能指標として使用します.Kは普通2以上で、実際の操作は3から取ります.元のデータセットのデータ量が小さい時だけ2を取ります.K-CVの実験はk個のmodelsを確立して、k回のtest setsの平均的な識別率を計算します.実作では、kが大きいと各ラウンドのトレーニングサンプル数が多くなります.一般的にはk=10(経験パラメータとして)が十分です.長所:K-CVは勉強しすぎや勉強していない状態の発生を効果的に避けることができ、最後に得られた結果も説得性があります.短所:K値選択は確定する必要があります.
3)Leave-One-Out Cross Validation(LOO-CVと表記)方法:元のデータにN個のサンプルがあるとLOO-CVはN-CVであり、つまりサンプルごとに検証セットとして残りのN-1個のサンプルをトレーニングセットとしているので、LOO-CVはN個のモデルを得る.このN個のモデルによる最終的な検証セットの分類精度の平均数は、この下のLOO-CV分類器の性能指標として用いられている.利点:前のK-CVに比べて、LOO-CVは2つの明確な利点がある.a.毎ラウンドのほとんどのサンプルがトレーニングモデルに用いられているので、元のサンプルの分布に最も近い.このように評価した結果は信頼できる.b.実験中にランダム要素がないと実験データに影響します.実験過程は複製されることができます.欠点:計算コストが高いです.必要なモデルの数は元のデータサンプルの数と同じです.元のデータサンプルの数がかなり多い場合、LOO-CVは実際の作業ではほとんど表示されません.訓練の度に分類器がモデルの速度が速い限り、ほとんど表示されません.あるいは並列化計算で計算に要する時間を減らすことができます.
データセットの分割原則が交差して検証されています.元のデータセットはトレーニングセットとテストセットに分割されています.二つのポイントを守らなければなりません.トレーニングセットのサンプル数は十分でなければなりません.一般的には少なくとも総サンプル数の50%以上です.二つのサブセットは完全なセットから均一にサンプリングしなければならない.第2の点は特に重要であり、均一サンプリングの目的は、トレーニングセット/テストセットと完全セットとの間の逸脱を低減することであるが、容易にはできない.一般的な方法はランダムサンプリングであり、サンプル数が十分であれば均一サンプリングの効果を達成することができる.しかしランダムもこのやり方の盲点であり、常にデータの上で細工ができるところである.例えば、視認率が理想的でない場合、トレーニングセットとテストセットのセットを再サンプリングして、テストセットの視認率が満足できるまで、厳密に言えばカンニングです.
slearnライブラリでクロス検証の方法を使用します.
from sklearn import cross_validation
gbdt=GradientBoostingRegressor()
score = cross_validation.cross_val_score(gbdt, train_set, 
    label_set, cv=10, scoring='accuracy')

   gbdt    
train_set:   
label_set:  
cv:        
scoring:        ,     ,        
           ‘accuracy’,        
         [‘accuracy‘, ‘adjusted_rand_score‘, 
         ‘average_precision‘, ‘f1‘, ‘f1_macro‘, 
         ‘f1_micro‘, ‘f1_samples‘, ‘f1_weighted‘, 
         ‘log_loss‘, ‘mean_absolute_error‘, 
         ‘mean_squared_error‘, ‘median_absolute_error‘,
          ‘precision‘, ‘precision_macro‘, 
          ‘precision_micro‘, ‘precision_samples‘, 
          ‘precision_weighted‘, ‘r2‘, ‘recall‘, 
          ‘recall_macro‘, ‘recall_micro‘, 
          ‘recall_samples‘, ‘recall_weighted‘, 
          ‘roc_auc‘] 
備考:sk-learnにおけるクロス検証は、Recal、precision、F 1などの正負の種類を区別する必要があるいくつかの評価基準については、デフォルトでは2つの分類(0,1)を採用し、0種類のサンプルを負の種類とし、1種類を正のクラスとし、使用する時にはまずデータセットをlableリセットしてから使用することができます.
from sklearn import cross_validation  #       sklearn   recall     1    0     e     ,      
from sklearn.preprocessing import LabelBinarizer #        1    0
lb = LabelBinarizer()
Y=lb.fit([0,4]).transform(Y).flatten()#   0,4     ,       
score = cross_validation.cross_val_score(clf, X, Y, cv=5, scoring='recall')#clf        
本論文の一部の内容は以下の通りである.http://blog.sina.com.cn/s/blog_688077 cf 010 zqpj.