Machine learning 如何在Keras回归器中解释MSE

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

我正试图建立一个模型来预测房价

我有一些功能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',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的平方根那么简单,但也没有那么复杂;基本上你要做的是:

  • 将预测转换回原始数据的初始比例
  • 获取这些反转转换预测和原始数据之间的MSE
  • 取结果的平方根
  • 为了获得在您的问题的业务环境中有意义的模型性能指标(例如,此处的美元)

    让我们看一个玩具数据的快速示例,省略模型本身(这在这里是无关的,事实上可以是任何回归模型,而不仅仅是Keras模型):

    来自sklearn.preprocessing导入StandardScaler的
    
    从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的人来说是非常有价值的,因为他们不知道从模型中获取数据需要做什么。好极了!