【问题标题】:Neural network for linear regression用于线性回归的神经网络
【发布时间】:2016-02-02 22:53:00
【问题描述】:

我找到了这个与我需要的确切型号相匹配的好资源:http://ufldl.stanford.edu/tutorial/supervised/LinearRegression/

重要的部分是这样的。

你有一个情节 x->y。每个 x 值都是“特征”的总和,或者我将如何表示它们,z

因此,x->y 图的回归线将变为 h(SUM(z(subscript-i)),其中 h(x) 是回归线(函数)

在这个 NN 中,想法是每个 z-value 都被分配一个权重,以最小化最小二乘误差。

梯度函数用于更新权重以最小化误差。我相信我可能会错误地返回传播——我更新了权重。

所以我写了一些代码,但我的权重没有正确更新。

我可能只是误解了斯坦福帖子中的规范,所以我需要你的帮助。谁能验证我是否正确实现了这个 NN?

我的h(x) 函数是对初始数据的简单线性回归。换句话说,这个想法是神经网络会调整权重,使所有数据点都更接近这个线性回归。

for (epoch = 0; epoch < 10000; epoch++){

    //loop number of games
    for (game = 1; game < 39; game++){
      sum = 0;
      int temp1 = 0;
      int temp2 = 0;
      //loop number of inputs
      for (i = 0; i < 10; i++){
        //compute sum = x
        temp1 += inputs[game][i] * weights[i];
      }

      for (i = 10; i < 20; i++){
        temp2 += inputs[game][i] * weights[i];
      }

      sum = temp1 - temp2;

      //compute error
      error += .5 * (5.1136 * (sum) + 1.7238 - targets[game]) * (5.1136 * (sum) + 1.7238 - targets[game]);
      printf("error = %G\n", error);
      //backpropogate
      for (i = 0; i < 20; i++){
        weights[i] = sum * (5.1136 * (sum) + 1.7238 - targets[game]); //POSSIBLE ERROR HERE
      }

    }

    printf("Epoch = %d\n", epoch);
    printf("Error = %G\n", error);


  }

【问题讨论】:

    标签: c machine-learning neural-network regression gradient


    【解决方案1】:

    请查看Andrew Ng's Coursera。他是斯坦福大学的机器学习教授,可以比其他任何人更好地向您解释线性回归的概念。您可以在第一课中学习线性回归的基本知识。

    对于线性回归,您试图最小化成本函数,在这种情况下是平方误差之和(预测值 - 实际值)^2,并通过梯度下降实现。解决这样的问题不需要神经网络,使用神经网络会相当低效。

    对于这个问题,只需要两个值。如果您回想一下直线的方程 y = mx + b,您实际上只需要直线的两个方面:斜率和 y 截距。在线性回归中,您正在寻找最适合数据的斜率和 y 截距。

    在这个问题中,这两个值可以用theta0和theta1来表示。 theta0 是 y 截距,theta1 是斜率。

    这是线性回归的更新函数:

    这里,theta 是一个 2 x 1 维向量,其中包含 theta0 和 theta1。您所做的是取 theta 并减去误差总和乘以学习率 alpha(通常很小,例如 0.1)的平均值。

    假设直线的真正完美拟合在 y = 2x + 3 处,但我们当前的斜率和 y 截距都为 0。因此,误差总和将为 ,当从负数中减去 theta 时,theta 会增加,使您的预测更接近正确的值。对于正数,反之亦然。这是梯度下降的一个基本示例,您正在沿着斜坡下降以最小化模型的成本(或误差)。

    这是您应该尝试在模型中实现的模型类型,而不是更复杂的神经网络。在继续学习神经网络之前,尝试了解使用梯度下降的线性回归和逻辑回归。

    在 C 中实现线性回归算法可能相当具有挑战性,尤其是在没有 vectorization 的情况下。如果您想了解线性回归算法的工作原理,而不是专门使用 C 来实现它,我建议您使用 MatLab 或 Octave(免费替代品)之类的工具来实现它。毕竟,您找到的帖子中的示例使用相同的格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 2019-01-27
      • 2015-01-31
      • 2015-05-11
      • 2021-01-31
      • 2017-09-16
      • 2023-03-21
      相关资源
      最近更新 更多