はじめに
当記事はkaggleのLearnのIntro to Machine LearningのRandom Forestsを翻訳して備忘としたものです。
拙い英語力なので間違い等あればご指摘いただけたらと思います。
まとめ:【kaggle】翻訳記事まとめ【備忘翻訳】
前:【kaggle】機械学習イントロ - モデルの検証【備忘翻訳】
次:【kaggle】中級機械学習 - 欠損値【備忘翻訳】
当記事に含まれるコードはkaggle内のnotebook内で正常に動作します。動作を試したい場合はkaggleのnotebookで試してください。
ランダムフォレスト
より洗練された機械学習アルゴリズムを使用します。
イントロ
決定木は難しい決断を迫ります。多数の葉を持つ深いツリーは各予測がその葉に分類される少数の住宅のデータのみから得られるため、過剰適合します。一方、葉の少ない浅いツリーでは、各葉に分類された住宅のデータの違いを多く捉えることができないため、予測のパフォーマンスは低下します。
今日の最も洗練されたモデリング技術でさえ、過少学習と過剰学習の狭間に置かれています。しかし、多くのモデルには、パフォーマンス向上につながる巧妙なアイデアがあります。例としてランダムフォレストを見てみましょう。
ランダムフォレストは多数のツリーを使用し、各ツリーの予測を平均化して予測を行います。一般的に、単一の決定木よりも予測精度がはるかに高く、デフォルトのパラメータでもうまく機能します。モデリングを続ければ、より良いパフォーマンスを示すモデルを学ぶことができますが、その多くのモデルでは適切なパラメータを得ることが難しいです。
例
データをロードするコードはすでに数回見てきました。データロードを終えると次の変数が設定されています。
- train_X
- val_X
- train_y
- val_y
データロードのコード
import pandas as pd
# Load data
melbourne_file_path = '../input/melbourne-housing-snapshot/melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path)
# Filter rows with missing values
melbourne_data = melbourne_data.dropna(axis=0)
# Choose target and features
y = melbourne_data.Price
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea',
'YearBuilt', 'Lattitude', 'Longtitude']
X = melbourne_data[melbourne_features]
from sklearn.model_selection import train_test_split
# split data into training and validation data, for both features and target
# The split is based on a random number generator. Supplying a numeric value to
# the random_state argument guarantees we get the same split every time we
# run this script.
train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)
scikit-learnで決定木を構築した方法と同様にランダムフォレストモデルを構築します。ただし、今回はDecisionTreeRegressor
ではなく、RandomForestRegressor
クラスを使用します。
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
forest_model = RandomForestRegressor(random_state=1)
forest_model.fit(train_X, train_y)
melb_preds = forest_model.predict(val_X)
print(mean_absolute_error(val_y, melb_preds))
191669.7536453626
まとめ
さらなる改善の余地はありそうですが、これは決定木の最も良かった誤差250,000と比べると大きな改善です。決定木の最大深度を変更したのと同じように、ランダムフォレストもパフォーマンスを変更できるパラメーターがあります。しかし、ランダムフォレストモデルの最も優れた機能の一つは、この調整を行わなくても、通常は適切に機能することです。