nakamura244 blog

所属団体とは関係なく、個人的なblog

ML前のデータ前処理系の学習メモ

主に学習できた点

特徴量をどう見極めて行くかという一つの手法を学んだ

題材にしたデータ

House Prices: Advanced Regression Techniques | Kaggle

kaggleのstarterがとっつきやすそうなdatasetがあるやつを選んだ

自分はローカルで動かして理解したいので、データセットが小さめだと学習しやすくてありがたい

さっそくやっていく

可視化

まずは、どういったデータが揃っているのかということを見極めることからはじめていくわけですが、pandas-profilingというものを使うとあっという間に可視化してくれる

GitHub - pandas-profiling/pandas-profiling: Create HTML profiling reports from pandas DataFrame objects

f:id:tsuyoshi_nakamura:20190428202622p:plain

とても長くなっているのでファーストビューの所だけをcapった

でも

pandas-profilingだけだといっぱい色々ありすぎて正直ビギナーにはわからない。学習のためにも自分で色々といじって可視化してみよう思った

先人たちのkernelを参考にした

このkagglerのkernelのコード Blend&Stack LR&GB = [0.10649] {House Prices} v57 | Kaggle で下記の部分に注目した

1

train['YrBltAndRemod'] = train['YearBuilt'] + train['YearRemodAdd']
train['TotalSF'] = train['TotalBsmtSF'] + train['1stFlrSF'] + train['2ndFlrSF']

train['Total_sqr_footage'] = (train['BsmtFinSF1'] + train['BsmtFinSF2'] + train['1stFlrSF'] + train['2ndFlrSF'])

train['Total_Bathrooms'] = (train['FullBath'] + (0.5 * train['HalfBath']) + train['BsmtFullBath'] + (0.5 * train['BsmtHalfBath']))

train['Total_porch_sf'] = (train['OpenPorchSF'] + train['3SsnPorch'] +
                           train['EnclosedPorch'] + train['ScreenPorch'] +
                           train['WoodDeckSF'])

与えられた学習データには存在しない項目を作り出している点がなるほどって思った。

2

train = train[train.GrLivArea < 4500]
train.reset_index(drop=True, inplace=True)

外れ値と思われるデータをdropしてしまう

自分で可視化した結果

相関マトリックスを作ってみた

# correlation matrix
corrmat = train.corr()
plt.figure(figsize=(15, 11))
k = 15   #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index

cm = np.corrcoef(train[cols].values.T)

sns.set(font_scale=1.25)
sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', yticklabels=cols.values, xticklabels=cols.values, cmap='Blues')

plt.savefig('./heatmap.jpg')

f:id:tsuyoshi_nakamura:20190428204447j:plain

こうして眺めてみるとSalePriceに相関関係が高いのがTotalSF,OverallQual,Total_sqr_footage,GrLivAreaとわかるのかな

さいご

  • 今回はここまでにしましたが、これらの相関関係の高いデータを特徴量として実際に学習モデルに食わせていって予測を導き出すのかなという大まかな流れを理解できた
    • これだけでは精度が上がらないのはわかっているが、ひとまずは理解が進んだということで🍺