実現したいこと
boston住宅データで、層化samplingを使って、trainとtestのデータをスプリット
させています。層化を一定間隔(bins)にすると、下の図-1のようになるのですが、ここで、
層化させる範囲を、データ個数がある程度一定になるようにするということは必要としな
いのでしょうか。実用的な使い方をされている方のアドバイスがいただけたら、ありがた
いです。
該当のソースコード
import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error from sklearn.datasets import load_boston boston = load_boston() X = boston.data y = boston.target bins=5*np.arange(11) binned_y=np.digitize(y,bins) pd.Series(binned_y).hist(bins=25)#下図参照 # 特徴量と正解を訓練データとテストデータに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=binned_y, random_state=0) print('X_trainの形状:',X_train.shape,' y_trainの形状:',y_train.shape,' X_testの形状:',X_test.shape,' y_testの形状:',y_test.shape) # ランダムフォレスト回帰のモデルを作成 model = RandomForestRegressor(bootstrap=True, n_estimators=1000, criterion='mse', max_depth=None, random_state=0, n_jobs=-1) # モデルの訓練 model.fit(X_train, y_train)
参考にしたこと
下記の参考書のコードを参考にしています
・scikit-learn活用レシピ(㈱インプレス発行)の9.5レシピ72(pp.272-pp.274)
###自分なりの回答
層化サンプリングにより、trainとtestでの目的変数の分布が偏らないことが目的であり、
データ個数を一定化させると、その効果は減少する。しかし、データがある部分で極端に少なく
なり、その区分で2個未満にはさせないようにする。
(注)以上は、この質問をしてから、自分なりに分析したものです。
発生している問題・エラーメッセージ
今回該当なし
###補足情報
開発環境:Google Colaboratory
バージョン:python3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/14 11:35