0

現在、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 の場合、モデルは数回の反復で収束するはずですが、収束しません。この収束基準は厳しすぎませんか?

4

1 に答える 1