主代码中的分层K折叠对于learning_curve例程是相同的

时间:2018-03-27 10:45:14

标签: python machine-learning

我正在编写一个代码,在body命令中我使用stratifiedKfold进行交叉验证。 因为在训练和验证集上得到关于得分的一些情节会很棒,所以我读到了运行learning_curve例程以进行绘图。 然后是这个奇怪的事情(或者我希望我错了):在learning_curve例程的选项中,我可以对分层K折叠进行交叉验证(例如,在参数中指定cv),但是对于我在主代码中定义的那个,它将是不同的,新的。 我找不到如何解决这个问题:我的想法是在正文中使用相同的分层Kfold的图。

-----主要代码-----

skf = StratifiedKFold(difficulty_list,10)

for train, test in skf:
    X_train, X_test, y_train, y_test = X[train],X[test], y[train], y[test]

然后我想为这个给定的折叠调用验证学习曲线,但我只能投下以下

 plotValidationCurve(regressor,X_train,y_train,item)

使用单独的方法绘制图:

 def plotValidationCurve(estimator,X,y,item):
 ml_method_list = ['AdaBoost','LASSO','Elastic Net','SVR','Random Forest','Gradient Boosting','RGF']
from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit
fig = plt.figure()
plt.xlabel("Training examples")
plt.ylabel("Score")
train_sizes, train_scores, test_scores = learning_curve(estimator, X, y, train_sizes=np.linspace(0.05, 1.0, 20),cv=10)

如果通知我在这里指定了10层分层交叉验证,但与上面在skf中指定的不同。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

也许我解决了这个问题:如何将skf作为绘制学习曲线和设置参数的例程参数cv = skf?

这样的东西
plotValidationCurve(regressor,X_train,y_train,item,skf)

然后

def plotValidationCurve(estimator,X,y,item):
...
train_sizes, train_scores, test_scores = learning_curve(estimator, X, y, train_sizes=np.linspace(0.05, 1.0, 20),cv=skf)