アンサンブル回帰によって、連続データを線形回帰分析する手法を、実装・解説します。
本記事ではアンサンブル回帰のBaggingRegressorを適用した回帰手法を紹介します。
BaggingRegressorを使用することで、非線形な回帰分析が可能になります。
SVR rbf回帰分析は以下のscikit-learnマップの黒矢印に対応します。
目的変数の量を求める→サンプル数10万以下→説明変数xの特徴量のすべてが重要→通常の回帰分析がうまくいかない→[Ensemble Regressors]
です。
Ensemble Regressors
直線でうまく回帰分析できない例として、sin波からデータを生成し、BaggingRegressorを適用します。
実装コードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # 1:ライブラリのインポート-------------------------------- import numpy as np #numpyという行列などを扱うライブラリを利用 import pandas as pd #pandasというデータ分析ライブラリを利用 import matplotlib.pyplot as plt #プロット用のライブラリを利用 from sklearn import cross_validation, preprocessing, ensemble, tree #機械学習用のライブラリを利用 # 2:データの生成-------------------------------- # Generate sample data numSamples=80 x = np.sort(5 * np.random.rand(numSamples, 1), axis=0) y = np.sin(x).ravel() y= y + 0.2 * (np.random.randn(numSamples)) y=y.ravel() x_true=np.arange(0, 5.0, 0.1) # 3から10まで1刻み y_true = np.sin(x_true).ravel() # 解説3:BaggingRegressorを適用する-------------------------------- reg = ensemble.BaggingRegressor(tree.DecisionTreeRegressor(), n_estimators=100, max_samples=0.3) x_true=x_true.reshape((-1, 1)) y_reg = reg.fit(x, y).predict(x_true.reshape(-1, 1)) # 4:プロットしてみる------------------------------------------ %matplotlib inline plt.scatter(x, y, color='darkorange', label='data') plt.plot(x_true, y_true, color='navy', label='sin') plt.plot(x_true, y_reg, color='c', label='BaggingRegressor') plt.legend() plt.show() |
結果は次の通りになります。
水色がSVR rbfの結果です。
直線ではなく、カクカクの線でフィッティングされていることが分かります。
また元のsin波とも近い結果です。
実装コードを解説します。
# 解説3:BaggingRegressorを適用する——————————–
reg = ensemble.BaggingRegressor(tree.DecisionTreeRegressor(), n_estimators=100, max_samples=0.3)
ここで決定木を指定しています。
データ数(50個)から30%を使用して、決定木で回帰直線を作成します。
これを100本作成して、全決定木から多数決で予測値を決定します。
それでは「結局、アンサンブル回帰って何をやっていたの?」を説明します。
アンサンブル回帰の心
正確な情報は以下をご覧ください。
●scikit-learnのBagging Regressorの解説ページ
アンサンブル手法については、クラス分類と同じになります。
今回はただ回帰になっているだけです。
以上、Pythonとscikit-learnで学ぶ機械学習入門|第20回:アンサンブル回帰での回帰分析でした。
次回はPCAによる次元圧縮について説明します。