【问题标题】:Linear Regression - mean square error coming too large线性回归 - 均方误差太大
【发布时间】:2019-03-09 14:48:02
【问题描述】:

我有一个房屋销售数据集,我正在应用线性回归。在得到斜率和 y 截距后,我绘制图形并计算成本,得到的结果对我来说有点奇怪,因为

  1. 参数线与数据拟合得很好
  2. 但同一参数的成本价值巨大

这是绘制直线的代码

def plotLine(slope, yIntercept, X, y):
  abline_values = [slope * i + yIntercept for i in X]
  plt.scatter(X, y)
  plt.plot(X, abline_values, 'black')
  plt.title(slope)
  plt.show()

以下是计算成本的函数

def computeCost(m, parameters, x, y):
  [yIntercept, slope] = parameters
  hypothesis = yIntercept - np.dot(x, slope)
  loss = hypothesis - y
  cost = np.sum(loss ** 2) / (2 * m)
  return cost

下面的代码行给出了 x vs y 图,其中包含计算参数(为了这个问题的简单起见,我手动设置了参数)和成本值。

yIntercept = -70000
slope = 0.85
print("Starting gradient descent at b = %d, m = %f, error = %f" % (yIntercept, slope, computeCost(m, parameters, X, y)))
plotLine(slope, yIntercept, X, y)

上面sn-p的输出是

所以,我的问题是:

1.这是在 x vs y 图上绘制直线的正确方法吗?

2。为什么成本价值太大,即使参数很好地拟合数据,成本价值也可能如此之大。

编辑 1

print语句中的m是斜率值而不是X的大小,即len(X)

【问题讨论】:

    标签: python machine-learning linear-regression


    【解决方案1】:

    1. 您的绘图方式似乎是对的,您可以简化

    abline_values = [slope * i + yIntercept for i in X]
    

    abline_values = slope * X + yIntercept
    

    2。在您的榜样中设置了m=0.85似乎是这样的,但我不能告诉以来你没有提供对成本职能的调用。不应该是样本的大小吗?如果添加所有平方错误并将它们划分为2 * 0.85,则错误的大小取决于样本大小。并且由于它不是一个相对错误,并且值相当大,因此所有这些错误都可能加起来这一点。尝试设置m样本的大小。 此外,在计算假设值的符号中存在错误,它应该是a +。否则你会有一个负斜率,也解释了大错误。

    def computeCost(parameters, x, y):
        [yIntercept, slope] = parameters
        hypothesis = yIntercept + np.dot(x, slope)
        loss = hypothesis - y
        cost = np.sum(loss ** 2) / (2 * len(x))
        return cost
    

    【讨论】:

    • 实际上,我正在调用成本函数,它是在打印线。和一个是m的第一个参数是len(x),所以我已经在做你建议的东西我猜 span>
    • 好的,这有点令人困惑,因为您将斜率值打印为m。呼叫在那里,但不是m的值。您应该在您的问题 span>中添加它
    • 在成本函数中,不应该在hypothesis = yIntercept - np.dot(x, slope),因此hypothesis = yIntercept + np.dot(x, slope)? span>
    • 是的,你是对的。我在我的代码中修复了它,但成本值仍然是5295011870.385715 span>
    【解决方案2】:

    由于输入数据未规范化,误差值很大。根据您的代码,x 从 0 到 250k 不等。在这种情况下,我建议您将 x 标准化为 [0, 1]。有了这个,我希望损失很小,学习的参数(斜率和截距)也很小。

    【讨论】:

      猜你喜欢
      • 2020-09-07
      • 2018-09-24
      • 1970-01-01
      • 2018-12-05
      • 2020-06-22
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多