線形回帰のまとめ(その4、Pythonでのパフォーマンス比較)
前回は、線形回帰をPythonを使って、
最後に、最急降下法が収束する様子を観察し、それぞれの方法でのパフォーマンスの比較をしてみようと思います。
最急降下法のコードをちょこっと変形
するとこんなグラフが出力されます。
せいぜい100回のループで収束してるようです。
データの値やサイズに応じて、適切なパラメーター設定が必要になるわけですね。
グラフの縦軸は対数です。行列式も数式(sum計算)も健闘してますが、ライブラリの高速性には驚きますね。
いかがでしたでしょうか。(ブロガー的なこの言い回し好きじゃない)
線形回帰についてじっくり見てきました。次は線形じゃない場合を考えていかなければなりませんね。機械学習をマスターするにはまだまだ先は長そうです。頑張って書いていきましょう!
- 数式で解くパターン
- 最急降下法を力技でやるパターン
- 最急降下法を行列で解くパターン
- ScikitLearnのライブラリを使うパターン
最後に、最急降下法が収束する様子を観察し、それぞれの方法でのパフォーマンスの比較をしてみようと思います。
最急降下法が収束する様子をグラフ化する
最急降下法のコードをちょこっと変形
w0=0 w1=0 alpha=0.001 iterations = 1000 L=np.empty([iterations, 1]) for i in range(iterations): w0, w1 = doDescent(X, Y, w0, w1, alpha) L[i] = computeCost(X, Y, w0, w1) plt.plot(range(L.shape[0]), L) plt.xlabel(u'最急降下法の繰り返し回数[回]') plt.ylabel(u'目的関数J(θ)の値') plt.show()
するとこんなグラフが出力されます。
せいぜい100回のループで収束してるようです。
ですが、移動量を決めるパラメータαを0.001に変更すると
1000回でも収束しなくなりました。データの値やサイズに応じて、適切なパラメーター設定が必要になるわけですね。
4つの方法でのパフォーマンス(応答時間)
収束したかどうかは別にして、α=0.1で1000回、10個~10万個の訓練データを与えてベタ回しした結果がこちらです。グラフの縦軸は対数です。行列式も数式(sum計算)も健闘してますが、ライブラリの高速性には驚きますね。
いかがでしたでしょうか。(ブロガー的なこの言い回し好きじゃない)
線形回帰についてじっくり見てきました。次は線形じゃない場合を考えていかなければなりませんね。機械学習をマスターするにはまだまだ先は長そうです。頑張って書いていきましょう!