2
問題は非常に簡単で、わずか5サンプルしかありません。単純なロジスティック回帰は何百万回の反復を収束させる必要があるのですか?
しかし、Gradient Descentは数千万の反復のように非常に遅く収束します。
なぜ、私のアルゴリズムに間違いがありますか?
P.S.以下のJuliaコード:
X = [
1.0 34.6237 78.0247;
1.0 30.2867 43.895;
1.0 35.8474 72.9022;
1.0 60.1826 86.3086;
1.0 79.0327 75.3444
]
Y = [0 0 0 1 1]'
sigmoid(z) = 1/(1 + e^-z)
# Cost function.
function costJ(Theta, X, Y)
m = length(Y)
H = map(z -> sigmoid(z), (Theta' * X')')
sum((-Y)'*log(H) - (1-Y)'*log(1 - H))/m
end
# Gradient.
function gradient(Theta, X, Y)
m = length(Y)
H = map(z -> sigmoid(z), (Theta' * X')')
(((X'*H - X'*Y)')/m)'
end
# Gradient Descent.
function gradientDescent(X, Y, Theta, alpha, nIterations)
m = length(Y)
jHistory = Array(Float64, nIterations)
for i = 1:nIterations
jHistory[i] = costJ(Theta, X, Y)
Theta = Theta - alpha * gradient(Theta, X, Y)
end
Theta, jHistory
end
gradientDescent(X, Y, [0 0 0]', 0.0001, 1000)
「コンバージェンス」はどのように定義しますか?すべてのサンプルの正しい分類?勾配の小さなL2ノルム? – lejlot
ええと、それは良い質問です、私は何を意味するのだろう - 反復の合理的な量の後にコスト関数の最小値を見つける:)。このような理由から、妥当な金額は数百万ではなく、数千から数千になるはずです。 –
勾配降下の実装では、ブレークはありません。コスト関数の削減を比較し、それがループを終了して戻るよりも十分小さい場合は、比較する必要があります。 – niczky12