python 为什么不同的损失公式在同一个模型上会产生不同的值?

9jyewag0  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(102)

我必须实现一个多层感知器模型与以下数据:

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
xriantvc

xriantvc1#

我应该考虑哪一个?
测试集得分估计模型在新数据上的表现:

>>> mlp.score(X_test, y_test)               # Instead of 1 - score()
0.7871092

mlp.score告诉您分类器的准确率约为78%,这应该接近clf.best_score_-来自GridSearchCV的交叉验证分数,在这里它们彼此相差约1%。
其他人有不同的解释。
1.这条线比较分类问题的均方误差。这通常是不正确的,因为它在 * 分类 * 问题上应用了 * 回归 * 度量。

test_error = np.mean(np.square(np.array(y_testpred)-np.array(y_test)))

1.在评估训练集的均方误差时也会遇到类似的问题。然而,神经网络是“strong learners“,只要没有标签差异,它就可以完美地拟合训练集。因此,训练集上的任何散度度量都应该驱动为0.0

training_error = np.mean(np.square(np.array(y_trainpred)-np.array(y_train)))

对于分类,默认的损失函数是“对数损失”。我在这里写了一个答案,更好地解释了如何为MLP分类器和回归函数计算它:MLPRegressor的培训和验证损失历史记录

相关问题