如何解决为什么我有三个不同的 MSE 值
我写了一个 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,activation='relu'))
model.add(Dense(1,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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。