0
我在JavaScript中使用梯度下降实现了我的第一个(单变量)线性回归。梯度下降收敛一个参数的速度比其他参数快
const LEARNING_RATE = 0.000001;
let m = 0;
let b = 0;
const hypothesis = x => m * x + b;
const learn = (alpha) => {
if (x.length <= 0) return;
let sum1 = 0;
let sum2 = 0;
for (var i = 0; i < x.length; i++) {
sum1 += hypothesis(x[i]) - y[i];
sum2 += (hypothesis(x[i]) - y[i]) * x[i];
}
b = b - alpha * sum1/(x.length);
m = m - alpha * sum2/(x.length);
}
// repeat until convergence learn(LEARNING_RATE);
假设中m的斜率快速调整,但y轴的交点需要时间进行调整。我不得不为b使用不同的学习率来使其工作。
const learn = (alpha) => {
if (x.length <= 0) return;
let sum1 = 0;
let sum2 = 0;
for (var i = 0; i < x.length; i++) {
sum1 += hypothesis(x[i]) - y[i];
sum2 += (hypothesis(x[i]) - y[i]) * x[i];
}
b = b - 100000 * alpha * sum1/(x.length);
m = m - alpha * sum2/(x.length);
}
任何人都可以指出我的算法有什么问题吗?它可以在GitHub repository和this article中找到。
感谢您的回复。我有没有把你说得对,算法本身没有错误?但是,只需要很短的时间学习一个小的学习率? –
是的,我没有发现任何错误。是的,对于小的学习率,你会在稍后发现gminimal。 –