我有一個數據集的21個科目不同數量的樣品每個。 我做了一個曲線(查看圖)。我刪除:[10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40]來自每個主題的樣本。我使用StratifiedShuffleSplit和90%的train_size和10%的test_size。這意味着:如何讓train_scores繪製學習曲線而不使用scikitlearn的learning_curve功能?
- 當我除去10個樣品,9將用於訓練和1用於測試
- 當我除去20個樣品,18將被用於訓練和2用於測試
- 如果我移除30個樣品,27將用於訓練和3用於測試
- 當我除去40個樣品,36將被用於訓練和4用於測試
該曲線示出了精度(test_score)但不是train_score 。
如何在不使用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("")