TensorFlow と scikit-learn 重回帰分析の 3D ビジョン
先の記事 : 「TensorFlow と scikit-learn 分類器の視覚的比較」 では線形分離できないデータセットについて決定境界を分類器別にプロットして比較してみましたが、今度は TensorFlow によるニューラルネットワークと scikit-learn の各種回帰分析器による近似曲面を 3-D ビジョンで比較してみます。
TensorFlow については基本的な MLP をベースにエポック数で比較、scikit-learn については代表的な回帰分析器 (Regresesor) 別に試しています。重回帰の題材はシンプルに sin(x) + cos(y) をノイズなしでサンプリングしています。(ノイズありだと曲面がきれいに見えなかったので。)MSE (平均二乗誤差)の数値も併せて表記しています。
サンプリングの結果をプロットすると以下のような図になります。
サンプリングの結果は青色で描画し、同じ xy 平面における予測近似曲面はライム(緑)色で描画します :
TensorFlow MLP による回帰
TensorFlow についてはユニット数 [512, 128] の 2 層 MLP で試しました。
活性化関数による差はあまり見られなかったので、エポック数で近似曲面の様子を比較してみました。
1) 1 epoch
# MSE : 0.8860
1 epoch 直後の画像です。ライム色が近似曲面です。
2) 5 epochs
# MSE : 0.2806
3) 10 epochs
# MSE : 0.1555
10 epochs のトレーニングで予測の精度が高まっています。
4) 100 epochs
# MSE : 0.0343
かなり近似できていますが、1000 epochs までトレーニングを続けます。
5) 1000 epochs
# MSE : MSE : 0.0089
MSE が 0.01 を切りました。
scikit-learn の回帰分析器
scikit-learn については代表的な回帰分析器をデフォルト・パラメータで順繰りに試してみました :
線形回帰, 多項式フィッティング, K-近傍法, 決定木, Random Forest, SVM, Gaussian Process, AdaBoost
(線形回帰はともかくも)全体的に予想より上手く近似できていますが、Gaussian Process はほぼ誤差がありません。
決定木や Random Forest は図を拡大すれば AdaBoost 的になっているかもしれません。
1) 線形回帰 (linear_model.LinearRegression)
# MSE : 0.6370
2) 多項式フィッティング
# MSE : 0.0328
図は 3 次多項式です。
3) K-近傍法
# MSE : 0.0025
4) 決定木
# MSE : 0.0052
5) Random Forest
# MSE : 0.0061
6) SVM
# MSE : 0.0054
7) Gaussian Process
# MSE : 0.0000000000015268
%.4f (小数点以下4桁表示) では誤差が 0 になってしまいました。
8) AdaBoost
# MSE : 0.0753
決定木や Random Forest もこんな感じになるかと思いましたが…
以上