0

Web や講義ノートで見つけたさまざまな情報源に基づいて、次の Batch Gradient descednt アルゴリズムを実装しました。

この実装は、停止基準の点では理想的ではありませんが、私のサンプルでは機能するはずです。

入力:

x = [1,1;1,2;1,3;1,4;1,5];
y = [1;2;3;4;5];
theta = [0;0];

コード:

tempTheta = [0;0];

for c = 1:10000,
    for j = 1:2,
        sum = 0;
        for i = 1:5,
            sum = sum + ((dot(theta', x(i, :)) - y(j)) * x(i,j)); 
        end
        sum = (sum / 5) * 0.01;

        tempTheta(j) = theta(j) - sum;
    end
    theta = tempTheta;
end

期待される結果は ですtheta = [0;1]が、私の実装では常に が返されます theta = [-3.5, 1.5]

アルファと開始点のさまざまな組み合わせを試しましたが、うまくいきませんでした。どこで間違いを犯していますか?

4

1 に答える 1

2

この行で

sum = sum + ((dot(theta', x(i, :)) - y(j)) * x(i,j));

の間違ったインデックスを使用しています。サンプル イテレータではなく、ディメンション イテレータのようにyである必要があります。y(i)j

変更後

theta =

  -1.5168e-07
   1.0000e+00
于 2013-08-22T10:26:00.333 に答える