【发布时间】:2017-05-05 23:46:24
【问题描述】:
我有一个包含 21 个受试者的数据集,每个受试者的样本数量不同。 我做了一条曲线(检查图)。我从每个主题中删除: [10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,32,34,36,38,40] 个样本。我正在使用具有 90% train_size 和 10% test_size 的 StratifiedShuffleSplit。这意味着:
- 当我删除 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("")
【问题讨论】:
标签: python-3.x pandas numpy machine-learning scikit-learn