为什么我有三个不同的 MSE 值

Why i've got a three different MSE values

我写了一个 mlp 并想开始调整它以适应最佳结果。但我坚持使用几种不同的 MSE。

from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn import metrics
import numpy
import joblib

# load dataset
#dataframe = read_csv("housing.csv", delim_whitespace=True, header=None)
dataframe = read_csv("100.csv",  header=None)
dataset = dataframe.values
# split into input (X) and output (Y) variables
X = dataset[:,0:6]
Y = dataset[:,6]
# define the model
def larger_model():
    # create model
    model = Sequential()
    model.add(Dense(20, input_dim=6, kernel_initializer='normal', activation='relu'))
    model.add(Dense(50, kernel_initializer='normal', activation='relu'))
    model.add(Dense(1, kernel_initializer='normal', activation='linear'))
    # Compile model
    model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae','mse'])
    return model
# evaluate model with standardized dataset
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('mlp', KerasRegressor(build_fn=larger_model, epochs=100, batch_size=5, verbose=1)))
pipeline = Pipeline(estimators)
kfold = KFold(n_splits=2)
results = cross_val_score(pipeline, X, Y, cv=kfold)
pipeline.fit(X, Y)
prediction = pipeline.predict(X)

result_test = Y

print("%.2f (%.2f) MSE" % (results.mean(), results.std()))
print('Mean Absolute Error:', metrics.mean_absolute_error(prediction, result_test))
print('Mean Squared Error:', metrics.mean_squared_error(prediction, result_test))

给我结果:

Epoch 98/100
200/200 [==============================] - 0s 904us/step - loss: 0.0086 - mae: 0.0669 - mse: 0.0086
Epoch 99/100
200/200 [==============================] - 0s 959us/step - loss: 0.0032 - mae: 0.0382 - mse: 0.0032
Epoch 100/100
200/200 [==============================] - 0s 894us/step - loss: 0.0973 - mae: 0.2052 - mse: 0.0973
200/200 [==============================] - 0s 600us/step
21.959478

-0.03 (0.02) MSE
Mean Absolute Error: 0.1959771416462339
Mean Squared Error: 0.0705598179059006

所以我在这里看到了 3 个不同的 mse 结果。为什么会这样,当我要调整它时,我应该记住哪一个来理解整体模型得分?

基本上我的理解是,如果您打印结果变量,那么您将获得 2 MSE,因为您使用了 n_splits=2.

-0.03 (0.02) MSE

以上输出是结果(MSE)和标准差(MSE)的均值或平均值。

Epoch 100/100
200/200 [==============================] - 0s 894us/step - loss: 0.0973 - mae: 0.2052 - mse: 0.0973

上面的输出 mse = 0.0973 这是我认为的 split=2,它将只占用整个数据的 50%(X),因为剩下的 50% 将作为验证数据。

Mean Squared Error: 0.0705598179059006

上面的输出来自你预测整个数据的地方,而不是 50% 使用最佳模型很明显,你将得到上面 3 个打印的 3 个不同的 MSE。

我也在解决一类非常相似的问题,所以做一件事将数据集分为训练和测试,并使用训练数据进行训练,当你预测时使用测试数据集,然后计算测试数据的 MSE,否则保留这是原样,并将均方误差:0.0705598179059006 作为您的最终 mse。