【kaggle入門ー重回帰分析】House Prices – Advanced Regression Techniquesーlightgbm

※アフィリエイト広告を利用しています。

はじめに

Kaggleは、英語のページしかありません。そこで、日本語で読みたい方向けに記事を作成しました。

Kaggle入門として、House Pricesのコンペで、lightgbmを適用して、submissionファイルを提出してみましょう!

準備

Pandasをインポートします。

import pandas as pd

次に、ドライブをマウントして、train.csvを読み込んでください。
注意‘/kaggle/House Prices/←の部分はフォルダ構成によって異なるので注意してください。

また、目的変数特徴量もここで作成しておきましょう。

今回の目的変数(予測値)は、SalePriceです。これをtrain_yに格納します。

そして、モデルに使用する特徴量は、EDAでみたように目的変数との関連性が深い、‘OverallQual’, ‘GrLivArea’, ‘GarageCars’, ‘TotalBsmtSF’, ‘FullBath’, ‘YearBuilt’を使用し、これをtrain_Xに格納します。

なお、前回のEDAはこちらのブログ記事を参考にしてください。
>>【kaggle入門ー重回帰分析】House Prices – Advanced Regression TechniquesーEDA

df_train = pd.read_csv('/kaggle/House Prices/train.csv')
train_y = df_train.SalePrice

predictor_cols = ['OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']
train_x = df_train[predictor_cols]

ホールドアウト法

今回は、モデルの精度をさらに高めるために、ホールドアウト法を使用します。

ホールドアウト法とは、データを学習データテストデータランダム2分割し、学習データでモデルを構築し、テストデータでモデルを検証する手法です。

これを行う目的は、汎化性能(未知の新たなデータに予測できる性能)を高くすることです。

今回用いるのは、データを学習用検証用交差させる検証法であるクロスバリデーションのうち、KFoldを用います。

KFoldは、scikit-learnsklearn.model_selectionKFoldがありますので、こちらを使用します。

KFoldは、データをk個にランダムに分割してくれます(K-Folds cross-validator)

今回は学習データ2つテストデータ2つ合計4つ(tr_x,va_x、tr_y,va_y)に分割します。

from sklearn.model_selection import KFold
kf = KFold(n_splits=4,shuffle=True,random_state=71)
tr_idx,va_idx = list(kf.split(train_x))[0]
tr_x,va_x = train_x.iloc[tr_idx],train_x.iloc[va_idx]
tr_y,va_y = train_y.iloc[tr_idx],train_y.iloc[va_idx]

モデルの使用

今回は、lightgbmを使用します。

lightgbmは、ツリーベースの学習アルゴリズムを用いた勾配ブースティング手法です

トレーニング速度の高速化高効率化メモリ使用量の削減精度の向上並列・分散・GPU学習への対応、大規模データの取り扱いが可能という利点があります。

#ligthgbmを使用します。
import lightgbm as lgb

lgb_train = lgb.Dataset(tr_x,tr_y)
lgb_test = lgb.Dataset(va_x,va_y)

params =  {'metric' : 'rmse'}
num_round = 100

#特徴量はパラメータで指定
categorical_features = ['OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']
model= lgb.train(params,lgb_train,
                 categorical_feature=categorical_features,
                 valid_names=['train','valid'],valid_sets=[lgb_train,lgb_test])
#スコアの確認
va_pred = model.predict(va_x)
print(va_pred)

モデルの適用し、ファイルを提出する

#モデルをテストデータに適用する
#テストデータを読み込んでtrain_Xと同じ特徴量を抽出する。
df_test = pd.read_csv('/content/drive/MyDrive/kaggle/House Prices/test.csv')
test_X = df_test[predictor_cols]
#予想価格をモデルを使って表示する
pred_prices = model.predict(test_X)
print(pred_prices)
#提出ファイルを作成
my_submission = pd.DataFrame({'Id': df_test.Id, 'SalePrice': pred_prices})
my_submission.to_csv('submission2.csv', index=False)

モデルの適用からファイルの提出までの方法を詳しく知りたい方は以下のブログ記事を参考にしてください。
>>【kaggle入門ー重回帰分析】House Prices – Advanced Regression Techniquesーランダムフォレスト

Kaggleで悩んだら

「Kaggle で勝つデータ分析の技術」

データ分析の最も有名なコンペティションプラットフォームであるKaggleにおけるテクニックや事例を、現時点で最新のものを整理した書籍。特徴量の作り方バリデーションパラメータチューニングなどについて、一般的な書籍ではあまり言及されないポイント等に解説。
>>【書評】Kaggleで勝つデータ分析の技術

以下の書籍は、Kaggleを始める方には本当にオススメの書籍です。Kaggleわからないこと悩んだことがあった方は、購入を検討してみください。

本だけでは物足りないという方は、動画のプラットフォームで学ぶこともオススメです。興味がございましたら、以下の無料オンライン説明会に参加してみてはいかがでしょうか。