2016-12-20 9 views
0

私は、それぞれ異なるサンプル数の21人の被験者のデータセットを持っています。 私は曲線を描きました(図を見てください)。私は各被験者から[10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40]のサンプルを取り除く。私は90%のtrain_sizeと10%のtest_sizeでStratifiedShuffleSplitを使用しています。これが意味する:learning_curve fuction for scikitlearnを使用せずに学習曲線をプロットするtrain_scoresを取得するにはどうすればよいですか?

  • を私は9私は20個のサンプルを削除すると、18が私は削除するとき
  • をテストするためのトレーニング及び2に使用される
  • をテストするための訓練と1のために使用される10個のサンプルを除去する際30個のサンプル、27は、私は40個のサンプルを削除すると、36がこの曲線は、精度(test_score)ではなくtrain_scoreを示す

をテストするための訓練及び4に使用される

  • をテストするための訓練及び3に使用されます。

    scikit-learnのlearning_curve関数を使用せずにtrain_scoreをプロットするにはどうすればよいですか? http://scikit-learn.org/stable/auto_examples/model_selection/plot_learning_curve.html

    コード:

    result_list = [] 
    
        #LOADING .mat FILE 
        x=sio.loadmat('/home/curve.mat')['x'] 
        s_y=sio.loadmat('/home/rocio/curve.mat')['y'] 
        y=np.ravel(s_y) 
    
    
        #SENDING THE FILE TO PANDAS 
        df = pd.DataFrame(x) 
        df['label']=y 
    
    
        #SPECIFYING THE # OF SAMPLES TO BE REMOVED 
        for j in [10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,32,34,36,38,40]: 
         df1 = pd.concat(g.sample(j) for idx, g in df.groupby('label')) 
    
         #TURNING THE DATAFRAME TO ARRAY 
         X = df1[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]].values 
         y = df1.label.values 
    
    
         #Cross-validation 
         clf = make_pipeline(preprocessing.RobustScaler(), neighbors.KNeighborsClassifier()) 
         ####################10x2 SSS#################### 
         print("Cross-validation:10x10") 
         xSSSmean10 = [] 
         for i in range(10): 
          sss = StratifiedShuffleSplit(2, test_size=0.1, random_state=i) 
    
          scoresSSS = model_selection.cross_val_score(clf, X, y, cv=sss.split(X, y)) 
          xSSSmean10.append(scoresSSS.mean()) 
    
    
         result_list.append(xSSSmean10) 
         print("") 
    

    enter image description here

  • 答えて

    1

    StratifiedShuffleSplit.split戻り二つの値:列車と試験。 sss.split(X, y)の値をタプル、たとえばtesttupleに割り当てることができます。その後、あなただけのトレーニングセットの精度を計算

    traintuple = (testtuple[0],testtuple[0]) 
    

    :このように

    scoreSSS_train = model_selection.cross_val_score(clf, X, y, cv=traintuple) 
    

    トレーニングの両方その後、あなたは以下のように構築のみ列車セットで構成されている新しいタプル、traintupleを作成しますテストは同じセットで実行されます。

    xSSSmean10と同じように、新しい空のリストに平均値scoreSSS_trainを追加すると、うまくいくはずです(申し訳ありません)。

    関連する問題