我必须实现一个多层感知器模型与以下数据:
hl_parameters = {'hidden_layer_sizes': [(10,), (50,), (10,10,), (50,50,)]}
mlp_cv = MLPClassifier(max_iter=300, alpha=1e-4, solver='sgd', tol=1e-4, learning_rate_init=.1, verbose=True, random_state=ID)
mlp_cv.fit(X_train, y_train)
clf = GridSearchCV(mlp_cv, hl_parameters, cv=5)
clf.fit(X_train, y_train)
print(clf.best_params_)
print(clf.best_score_)
我得到了这个输出:
Best parameters set found: {'hidden_layer_sizes': (50,)}
Score with best parameters:
0.7779999999999999
现在我给mlp赋值clf.best_estimator
,这应该等于给mlp赋值MLPClassifier(hl_parameters.get('hidden_layer_sizes')[1], ...)
,对吗?
为了计算训练误差和测试误差,我使用了一些损失公式,如下所示。
问题是:为什么我会得到不同的值?我应该考虑哪一个?
mlp = clf.best_estimator_
y_trainpred= clf.predict(X_train)
training_error = np.mean(np.square(np.array(y_trainpred)-np.array(y_train)))
y_testpred= clf.predict(X_test)
test_error = np.mean(np.square(np.array(y_testpred)-np.array(y_test)))
print ("Best NN training error: %f" % training_error)
print('Best NN training error2: ', 1. - clf.best_score_)
print('Best NN training error3: ', 1. - mlp.score(X_train,y_train))
print('Best NN test error2: ', 1. - mlp.score(X_test,y_test))
print ("Best NN test error: %f" % test_error)
我得到了这个输出:
Best NN training error: 0.000000
Best NN training error2: 0.2220000000000001
Best NN training error3: 0.0
Best NN test error2: 0.21289075630252097
Best NN test error: 2.588303
1条答案
按热度按时间xriantvc1#
我应该考虑哪一个?
测试集得分估计模型在新数据上的表现:
mlp.score告诉您分类器的准确率约为78%,这应该接近
clf.best_score_
-来自GridSearchCV
的交叉验证分数,在这里它们彼此相差约1%。其他人有不同的解释。
1.这条线比较分类问题的均方误差。这通常是不正确的,因为它在 * 分类 * 问题上应用了 * 回归 * 度量。
1.在评估训练集的均方误差时也会遇到类似的问题。然而,神经网络是“strong learners“,只要没有标签差异,它就可以完美地拟合训练集。因此,训练集上的任何散度度量都应该驱动为
0.0
:对于分类,默认的损失函数是“对数损失”。我在这里写了一个答案,更好地解释了如何为MLP分类器和回归函数计算它:MLPRegressor的培训和验证损失历史记录