#概要
前回に引き続き2回目です.
同様,いただいたデータをいじっていきます.
#やってみた
- 前回作成したヒートマップに続いて散布図行列を作成してデータを可視化していきます.
from pandas.tools.plotting import scatter_matrix
scatter_matrix(droped_data)
plt.show()
ヒートマップと散布図行列から目的変数と相関のある特徴がいくつかあることがわかりました.
- その特徴から新しい特徴を作ることができそう → 新しい特徴作成
droped_data['C'] = (droped_data['A'] + droped_data['B'] ) / 2
# ここの処理はデータ依存です,今回は単純にAとBの平均を新しい特徴としました.
- この新しい特徴で目的変数が説明できるのでは...と思い,ランダムフォレストにつっこむことに まずは学習データの準備から
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.ensemble import RandomForestRegressor
train_X = df_new.drop(['D','E'],axis=1) # 説明変数:今回はいらないものをのぞいた全てを入れました
train_y = df_new.X # 目的変数,:予想する特徴
X_train, X_test, y_train, y_test = train_test_split(
train_X,train_y, test_size=0.2, random_state=0)
train_test_splitは,scikit-learnで用意されているデータセットを分割するメソッドです.
第1引数に入力データ,第2引数に正解ラベルの配列を渡します.
引数test_sizeではテストデータの割合を0.0~1.0の実数で指定できます.(今回の場合はtrain:test=8:2としました)
分割の比率は学習:テストデータを2:1がよく用いられる?? (参考:はてなブログ)
引数random_stateでは分割に使用する乱数のシード値を固定できます.
- 準備もできたので,早速ランダムフォレストへ
rf_reg = RandomForestRegressor(n_estimators=10)
rf_reg = rf_reg.fit(X_train, y_train)
今回は回帰問題なのでRandomForestRegressor()を使用しました.
分類問題であればRandomForestClassifier()に変更で解決??(試していません...)
インスタンスを定義して,fitするだけなんてとっても簡単ですね!
- trainとtestの精度を確認します.
print(rf_reg.score(X_train,y_train))
print(rf_reg.score(X_test,y_test))
やはり欠損値は落としただけでなくて,適切に埋めなければいけないですね...
#まとめ
今回はデータをとりあえずランダムフォレストに入れてみました.
やはり実データは欠損値が多く,適切な補完が必要だということがわかりました.
次回は補完方法について勉強していきます.
後輩が「前処理大全」という本を紹介してくれたので,併せて読んで勉強していきたいと思います.
##環境
- Python 3.6
- pandas 0.20.3
- scikit-learn 0.19.1
##最後に
データサイエンスもQiitaも初心者のため,間違っている箇所,おかしい箇所があると思います.
お気付きの方はご指摘いただけると幸いです.