2016-09-13 33 views
2

私は単純な線形回帰アルゴリズムの独自の実装を試みてきましたが、私は勾配降下にいくつかの問題があります。ここでpython線形回帰の実装

が、私はそれをコード化された方法は次のとおりです。

def gradientDescentVector(data, alpha, iterations): 
    a = 0.0 
    b = 0.0 
    X = data[:,0] 
    y = data[:,1] 
    m = data.shape[0] 
    it = np.ones(shape=(m,2)) 
    for i in range(iterations): 
     predictions = X.dot(a).flatten() + b 

     errors_b = (predictions - y) 
     errors_a = (predictions - y) * X 

     a = a - alpha * (1.0/m) * errors_a.sum() 
     b = b - alpha * (1.0/m) * errors_b.sum() 
    return a, b 

、私は、これはより多くの変数をうまくスケールしませんが、私はちょうど最初の簡易版でしようとしていた、そしてそこからフォローアップを知っています。

enter image description here

しかし、私は(特定のデータセット上)〜90回の反復の後に無限値を取得し、いないよ。私はコーセラでコースを機械学習から勾配降下アルゴリズムを以下ました

これまでのところ私の頭を包み込むことができました。

私はnumpyの放送について学び、同じ結果を得ようとする前に、各値を反復しようとしました。

誰かがここで問題になる可能性のあることを明らかにすれば、それは素晴らしいことでしょう。

答えて

1

パラメータが最適なものから発散していることは明らかです。 1つの理由は、学習率(「アルファ」)には大きすぎる値を使用している可能性があります。学習率を下げてみてください。ここに親指のルールがあります。常に0.001のような小さい値から開始します。それから、以前の学習率よりも3倍高い学習率で学習率を上げてみてください。 MSEエラー(または使用しているエラー関数)が少なければ、その罰金。 0.001から0.003の間の値を取ってみてください。次に、後者が真であれば、満足できるMSEに達するまでこれを再帰的に試してください。

+0

私は既に0.001にしようとしていましたが、うまくいきませんでしたが、さらに低い学習率、0.0000001で再試行しました。 私は何らかのエラー機能を使用していませんでしたが、後でそれを調べようとします。 – msk