3

これは少し長いショットですが、誰かがこれを見ることができるのだろうか. ここで線形回帰のバッチ勾配降下を正しく行っていますか? これは、単一の独立変数と切片に対して期待される答えを提供しますが、複数の独立変数に対しては提供しません。

/**
 * (using Colt Matrix library)
 * @param alpha Learning Rate
 * @param thetas Current Thetas
 * @param independent 
 * @param dependent
 * @return new Thetas
 */
public DoubleMatrix1D descent(double         alpha,
                              DoubleMatrix1D thetas,
                              DoubleMatrix2D independent,
                              DoubleMatrix1D dependent ) {
    Algebra algebra     = new Algebra();

    // ALPHA*(1/M) in one.
    double  modifier    = alpha / (double)independent.rows();

    //I think this can just skip the transpose of theta.
    //This is the result of every Xi run through the theta (hypothesis fn)
    //So each Xj feature is multiplied by its Theata, to get the results of the hypothesis
    DoubleMatrix1D hypothesies = algebra.mult( independent, thetas );

    //hypothesis - Y  
    //Now we have for each Xi, the difference between predictect by the hypothesis and the actual Yi
    hypothesies.assign(dependent, Functions.minus);

    //Transpose Examples(MxN) to NxM so we can matrix multiply by hypothesis Nx1
    DoubleMatrix2D transposed = algebra.transpose(independent);

    DoubleMatrix1D deltas     = algebra.mult(transposed, hypothesies );


    // Scale the deltas by 1/m and learning rate alhpa.  (alpha/m)
    deltas.assign(Functions.mult(modifier));

    //Theta = Theta - Deltas
    thetas.assign( deltas, Functions.minus );

    return( thetas );
}
4

2 に答える 2

1

あなたの実装には何も問題はなく、あなたのコメントに基づいて、collinearity生成時に誘発する問題がありますx2。これは、回帰推定において問題となります。

アルゴリズムをテストするために、乱数の 2 つの独立した列を生成できます。の値w0、つまり 、 、および の係数をそれぞれw1選択します。依存値を計算します。w2interceptx1x2y

次に、確率的/バッチ勾配のまともなアルゴリズムが回復できるかどうかを確認しw0、値w1w2

于 2013-02-19T15:29:45.977 に答える