【发布时间】:2015-03-09 12:53:28
【问题描述】:
我实际上想使用线性模型来拟合一组“罪”数据,但事实证明,损失函数在每次迭代期间都会变大。我下面的代码有问题吗? (梯度下降法)
这是我在 Matlab 中的代码
m=20;
rate = 0.1;
x = linspace(0,2*pi,20);
x = [ones(1,length(x));x]
y = sin(x);
w = rand(1,2);
for i=1:500
h = w*x;
loss = sum((h-y).^2)/m/2
total_loss = [total_loss loss];
**gradient = (h-y)*x'./m ;**
w = w - rate.*gradient;
end
这是我想要拟合的数据
【问题讨论】:
-
请改进您的代码。事实上,它没有运行,因为 m、rate、total_loss 没有定义。也许你甚至可以让它变得更短,更优雅。只包括看到问题所必需的最低限度。
-
对正弦数据进行线性回归(即斜率和截距)可能不会得到正确的结果。如果您想拟合该曲线,您可能需要添加高阶项(二阶、三阶等)。我现在可能会告诉你,你不会得到准确的结果。
-
@JohnGreen - 没有问题。实际上,当我运行您的代码时,它会收敛,但损失项相对较大……嗯,我得到 0.1157。如果要拟合正弦数据,则需要包含高阶项。我会写一篇文章。
-
@JohnGreen - 是的,您需要增加代表曲线的术语数量。只用一条直线表示正弦数据肯定会给你带来很大的错误。
-
@JohnGreen - 这真的很奇怪!好的别担心。我快到这里了。
标签: matlab machine-learning gradient-descent