【发布时间】:2019-06-17 01:23:32
【问题描述】:
我是机器学习的新手,目前正在使用 ScikitLearn 的 MLPClassifier 进行神经网络任务。根据 Andrew Ng 著名的机器学习课程,我正在绘制学习曲线,在我的例子中是使用 ScikitLearn 的函数 learning_curve(另见文档:https://scikit-learn.org/stable/auto_examples/model_selection/plot_learning_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.) 据我了解这条学习曲线,它为我提供了不同数量的训练数据的训练和 交叉验证 分数,直到一个时期结束(时期 = 一个前向传递和一个后向传递所有训练示例)。查看这两者之间的“差距”以及它们最终的得分,如果我有高偏差或方差问题,我可以诊断。但是,根据我的 MLPClassifier 的详细说明,神经网络正在训练多个 epoch,因此曲线中给出了哪个 epoch(训练的第一个 epoch、最后一个 epoch 或所有 epoch 的平均分数?) .还是我对时代有误解?
2.) 开始一个新批次(在 200 和 400 个训练示例之后),我得到了峰值。什么是解释它们的正确方法?
3.) 大概理解 1.) 也会回答这个问题:是什么让这个函数如此缓慢,以至于您需要多个并行作业 n_jobs 才能在合理的时间内完成它? clf.fit(X,y) 在我的情况下很快。
如果有人能帮助我更好地理解这一点,我将不胜感激。我也愿意接受文献推荐。
提前非常感谢!
【问题讨论】:
-
您的估算器是如何配置的?
-
刚刚编辑了我的代码 :) 我认为我的问题是,我必须更详细地了解亚当如何使用时代。另请参阅下面的评论。
标签: python machine-learning scikit-learn neural-network