ランダムフォレスト回帰は、複数の決定木を使うアンサンブル学習です。外れ値の影響を受けにくいです。使い方は、他の回帰モデルと同じです。
決定木回帰だと過学習しやすいので、ランダムフォレスト回帰の方を使うようにしましょう。
# 前回のプログラムの読込
%run 2.ipynb
# RandomForestRegressorで確認
from sklearn.ensemble import RandomForestRegressor
forest = RandomForestRegressor(random_state=0, n_estimators=10)
forest.fit(X_train, y_train)
y_pred = forest.predict(X_test)
score3 = r2_score(y_test, y_pred)
float(score3)
0.666
まずは、random_state=0オプションだけで実行します。random_stateを指定しないと、実行ごとに結果が変わる可能性があります。
# グリッドサーチで探索
gscv = GridSearchCV(RandomForestRegressor(n_estimators=10), {
'max_depth': [2, 3, 4],
'min_samples_leaf': [1, 2],
'random_state': [0]},
scoring='r2', cv=3)
gscv.fit(X_train, y_train)
y_pred = gscv.predict(X_test)
score4 = r2_score(y_test, y_pred)
float(score4)
0.695
続けて、グリッドサーチをします。
RandomForestRegressorで重要なオプションは、max_depthです。しかし、これだけだとデフォルト値を選ぶので、もう1つmin_samples_leafも指定します。
max_depth:枝分かれする木の深さ。大きすぎると過学習になります。
min_samples_leaf:葉の最小のデータ数。大きくするとラフなモデルになります。
決定係数は、0.695になります。
# 選択されたパラメーター
gscv.best_params_
{'max_depth': 3, 'min_samples_leaf': 2, 'random_state': 0}
# 予測データ(y_pred)と真値(y_test)を描画
scatter(y_pred, y_test)
散布図で見てみると、高価格帯もフィッティングしています。
ランダムフォレスト回帰のデメリットは、予測値がカテゴリ化しやすいことです(散布図に縦のカタマリが見られます)。
コメント