Machine learning 如何在Keras回归器中解释MSE
我正试图建立一个模型来预测房价 我有一些功能X(浴室数量等)和目标Y(约30万至80万美元) 在将Y装配到模型之前,我使用了sklearn的标准缩放器对其进行标准化。 这是我的Keras模型:Machine learning 如何在Keras回归器中解释MSE,machine-learning,keras,scikit-learn,regression,normalization,Machine Learning,Keras,Scikit Learn,Regression,Normalization,我正试图建立一个模型来预测房价 我有一些功能X(浴室数量等)和目标Y(约30万至80万美元) 在将Y装配到模型之前,我使用了sklearn的标准缩放器对其进行标准化。 这是我的Keras模型: def build_model(): 模型=顺序() 添加(密集(36,输入尺寸=36,激活=relu')) 添加(密集(18,输入尺寸=36,激活=relu')) model.add(密集型(1,激活='sigmoid')) compile(loss='mse',optimizer='sgd',metr
def build_model():
模型=顺序()
添加(密集(36,输入尺寸=36,激活=relu'))
添加(密集(18,输入尺寸=36,激活=relu'))
model.add(密集型(1,激活='sigmoid'))
compile(loss='mse',optimizer='sgd',metrics=['mae','mse']
回归模型
我在解释结果时遇到了困难——MSE为0.617454319755意味着什么
我是否必须对这个数字进行逆变换,并对结果进行平方根运算,得到741.55美元的错误率
math.sqrt(sc.inverse_transform([mse]))
我为刚开始时听起来很傻而道歉 MSE是均方误差,下面是公式。 基本上,它是预期输出和预测的不同值的平方平均值。求平方根并不能得到误差和输出之间的差异。这对培训很有用 目前您已经构建了一个模型。 如果要训练模型,请使用这些功能
mode.fit(x=input_x_array, y=input_y_array, batch_size=None, epochs=1, verbose=1, callbacks=None, validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None, initial_epoch=0, steps_per_epoch=None, validation_steps=None)
若你们想预测输出,你们应该使用下面的代码
prediction = model.predict(np.array(input_x_array))
print(prediction)
你可以在这里找到更多细节
我为刚开始时听起来很傻而道歉
不要;这是一个非常重要的微妙问题,通常(遗憾的是)在教程和介绍性论述中忽略了这一点
不幸的是,它不像求逆变换MSE的平方根那么简单,但也没有那么复杂;基本上你要做的是:
从sklearn.metrics导入均方误差
将numpy作为np导入
#玩具数据
X=np.数组([[1,2],[3,4],[5,6],[7,8],[9,10])
Y=np.数组([3,4,5,6,7])
#特征缩放
sc_X=StandardScaler()
X_序列=sc_X.拟合变换(X)
#结果量表:
sc_Y=StandardScaler()
Y_序列=sc_Y.拟合_变换(Y.整形(-1,1))
你的火车
#数组([-1.41421356],
# [-0.70710678],
# [ 0. ],
# [ 0.70710678],
# [ 1.41421356]])
现在,假设我们使用缩放集X_-train
和Y_-train
拟合我们的Keras模型(此处未显示),并获得训练集上的预测:
prediction=model.predict(X#u列)#此处按比例输入
打印(预测)
# [-1.4687586 -0.6596055 0.14954728 0.95870024 1.001172 ]
Keras报告的MSE实际上是按比例计算的MSE,即:
MSE\u scaled=均方误差(Y\u序列,预测)
MSE_标度
# 0.052299712818541934
我上面描述的3个步骤很简单:
MSE=均方误差(Y,sc_Y.逆变换(预测))#前两步,组合
微卫星
# 0.10459946572909758
np.sqrt(MSE)#第三步
# 0.323418406602187
因此,在我们的例子中,如果我们的初始Y是美元,那么相同单位(美元)的实际误差是0.32(美元)
请注意,对缩放的MSE进行逆变换的简单方法将给出非常不同(且不正确)的结果:
np.sqrt(sc_Y.逆变换([MSE_scaled]))
#阵列([2.25254588])
OP并没有要求这样做,而是要求在培训结果之前进行缩放时对结果MSE进行解释。非常感谢您的详细解释!由于答案的清晰性和卓越性,我们向上投票。这个答案对于刚接触ML/DL的人来说是非常有价值的,因为他们不知道从模型中获取数据需要做什么。好极了!