【问题标题】:Mean Squared error in PythonPython中的均方误差
【发布时间】:2016-12-28 03:04:56
【问题描述】:

我正在尝试制作一个函数,该函数将不使用 sklearn 或其他实现从 y(真实值)和 y_pred(预测值)计算均方误差。

接下来我试试:

def mserror(y, y_pred):
    i=0
    for i in range (len(y)):
        i+=1
        mse = ((y - y_pred) ** 2).mean(y)   
        return mse

能否请您纠正我在计算中做错了什么以及可以解决谁?

【问题讨论】:

  • i+=1 在我看来是错误的,因为您已经有一个带有 i 的迭代器。
  • 您也在循环内部返回,因此您只执行一次迭代并返回。您总是要在每次迭代中替换 mse 的值。另外,我不知道你想用i 做什么。您将其初始化为 0,然后将其递增,但随后您在 for 循环中使用 i 作为迭代器。仔细修改你的代码。
  • 这个问题是重复的:stackoverflow.com/questions/17197492/…

标签: python numpy scikit-learn


【解决方案1】:

下面是如何在python中实现MSE:

def mse_metric(actual, predicted):
    sum_error = 0.0
    # loop over all values
    for i in range(len(actual)):
        # the error is the sum of (actual - prediction)^2
        prediction_error =  actual[i] - predicted[i]
        sum_error += (prediction_error ** 2)
    # now normalize
    mean_error = sum_error / float(len(actual))
    return (mean_error)

【讨论】:

    【解决方案2】:

    我会说:

    def get_mse(y, y_pred):
    d1 = y - y_pred
    mse = (1/N)*d1.dot(d1) # N is int(len(y))
    return mse
    

    仅当 y 和 y_pred 是 numpy 数组时才有效, 但只要您决定不使用其他库,您就希望它们是 numpy 数组,以便您可以对其进行数学运算。

    numpy dot() 函数是 2 个 numpy 数组的点积 (你也可以写 np.dot(d1, d1) )

    【讨论】:

      【解决方案3】:

      首先,您重复使用 i 并递增它,但在范围内它会自动迭代到下一个数字。所以不要再使用 i 了。另一件事是您取 y 的平均值,而不是取平均值,而是取 ((y - y_pred) ** 2) 的平均值。我希望,你明白了。

      【讨论】:

        【解决方案4】:

        您正在无缘无故地修改索引。无论如何,for循环都会增加它。此外,您没有使用索引,例如,您没有使用任何y[i] - y_pred[i],因此您根本不需要循环。

        使用数组

        mse = np.mean((y - y_pred)**2)
        

        【讨论】:

        • y 的类型是什么,它是 ndarray 吗?它与使用 numpy.subtract 有何不同?
        猜你喜欢
        • 1970-01-01
        • 2020-03-29
        • 2013-05-22
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多