如何在不使用scikit-learn的learning_curve函数的情况下绘制学习曲线的train_scores?

我有一个包含21个不同样本数量的主体的数据集。我制作了一条曲线(请查看图表)。我从每个主体中移除了以下数量的样本:[10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,32,34,36,38,40]。我使用了StratifiedShuffleSplit,设置了90%的训练集大小和10%的测试集大小。这意味着:

  • 当我移除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("") 

enter image description here


回答:

StratifiedShuffleSplit.split 返回两个值:训练集和测试集。你可以将 sss.split(X, y) 的结果赋值给一个元组,比如 testtuple。然后你创建一个新的元组,只包含训练集,命名为 traintuple,构造如下:

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

然后你计算仅在训练集上的准确率:

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

这样,训练和测试都在同一个集合上进行。

scoreSSS_train 的平均值添加到一个新的空列表中,就像你对 xSSSmean10 所做的那样,应该可以工作(抱歉我无法测试)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注