現在、SGD の収束基準は、MSE エラー率が特定の境界内にあるかどうかをチェックします。
def compute_mse(data, labels, weights):
m = len(labels)
hypothesis = np.dot(data,weights)
sq_errors = (hypothesis - labels) ** 2
mse = np.sum(sq_errors)/(2.0*m)
return mse
cur_mse = 1.0
prev_mse = 100.0
m = len(labels)
while cur_mse/prev_mse < 0.99999:
prev_mse = cur_mse
for i in range(m):
d = np.array(data[i])
hypothesis = np.dot(d, weights)
gradient = np.dot((labels[i] - hypothesis), d)/m
weights = weights + (alpha * gradient)
cur_mse = compute_mse(data, labels, weights)
if cur_mse > prev_mse:
return
重みは、トレーニング セット内の単一のデータ ポイントに対して更新されます。
アルファが 0.001 の場合、モデルは数回の反復で収束するはずですが、収束しません。この収束基準は厳しすぎませんか?