我是机器学习的新手,目前我正在使用山基劳恩的MLPClassifier进行神经网络任务。根据安德鲁·吴( Andrew )著名的机器学习课程,我正在绘制学习曲线,在我的例子中,我使用了山猫学习的函数learning_curve (另见文档:curve.html):
clf = MLPClassifier(solver='adam', activation='relu', alpha=0.001,
learning_rate='constant',learning_rate_init=0.0001,
hidden_layer_sizes=[39, 37, 31, 34], batch_size=200,
max_iter=1000, verbose=True)
cv=GroupKFold(n_splits=8)
estimator =clf
ylim=(0.7, 1.01)
cv=cv
n_jobs=1
train_sizes=np.linspace(.01, 1.0, 100)
#Calculate learning curve
train_sizes, train_scores, test_scores = learning_curve(
estimator, X_array_train, Y_array_train,
groups=groups_array_train, cv=cv, n_jobs=n_jobs,
train_sizes=train_sizes, scoring='accuracy',verbose=10)我的MLPClassifier的求解器是“adam”,批次大小为200。
这是最终的情节:https://i.imgur.com/jDNoEVg.png
关于这种学习曲线的解释,我有两个问题:
1.)当我理解这个学习曲线时,它给出了到一个时代结束时不同数量的训练数据的训练和交叉验证分数(所有训练例子中的epoch=one向前传球和一次反向传球)。看看这两者之间的“差距”,如果我有很大的偏差或方差问题,我可以诊断出它们的最终得分。然而,根据我的MLPClassifier的详细情况,神经网络是经过几个阶段的训练,所以在曲线上给出了哪个时期(训练的第一个阶段、最后一个阶段还是所有时期的平均分数?)。还是我身边对时代的误解?
2.)开始一个新的批次(在200和400个训练示例之后),我得到了尖峰。怎样才是正确的解释方法呢?
3.)(可能理解1.)还将回答如下:是什么使这个函数如此缓慢,以至于您需要几个并行作业n_jobs才能在合理的时间内完成它?clf.fit(X,y)在我的例子中是快速的。
如果有人能帮助我更好地理解这一点,我将非常感激。我也愿意接受文献推荐。
事先非常感谢!
发布于 2019-01-23 13:17:11
学习曲线只能在一个稳定的、可推广的模型上计算。你确保这个型号不过分合适吗?
1)估计器被训练到完成,即到最后一个时期或任何早期停止阈值)。这有多少取决于您的估计器配置。事实上,learning_curve函数根本没有一个时代的概念。它同样适用于不使用历元的分类器。
2)与样品总数相比,你们的批次很大。考虑一个较小的批大小,可能是50或20。猜测:对于201个样本,您可能会得到一批200,一批1,这批1可能会引起问题。
3)学习曲线将针对每一次训练样本的交叉验证进行训练。在您的情况下,看起来您正在测试所有500种可能的培训规模。有5倍的简历,那将是2500轮的训练。如果没有并行化,这需要花费一个fit()+predict()的2500倍。相反,您应该只对一些培训集大小进行示例。train_sizes = numpy.linspace(0.0, 1.0, 30)在你的数据的0%到100%之间30点。
https://stackoverflow.com/questions/54327491
复制相似问题