私は、JavaScriptの勾配降下を伴う最初の(単変量)線形回帰を実装しました。他のパラメータよりも1つのパラメータの収束が速い
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に見つけることができます。
ご返信ありがとうございます。アルゴリズム自体に間違いがないと私はあなたを正しくしましたか?しかし、わずかな学習率で学習するだけで時間がかかりますか? –
はい、間違いはありませんでした。はい、小規模の学習率の場合は、後で極端に分かります。 –