2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kaggle~住宅価格予測②~

Posted at

はじめに

前回、線形回帰にて実装したが今回は非線形を用いての実装してみた。

引き続きこちらの記事を参考にデータ前処理を実装した。
「データ前処理」- Kaggle人気チュートリアル

モデルを作成

① 線形回帰(LinearRegression)
② Ridge回帰(Ridge)
③ サポートベクターマシン回帰(SVR)
④ ランダムフォレスト回帰(RandomForestRegressor)
こちらの4つについてモデルを作成した。

# 説明変数と目的変数
x = df_train[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
y = df_train['SalePrice']

# モジュールをインポートする
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 訓練データとテストデータとに分ける
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)

平均二乗誤差を算出する関数を作成する

def calc_model(model):
    # モデルを学習させる
    model.fit(X_train, y_train)
    # X_testに対する予測値
    pred_y = model.predict(X_test)
    # 平均二乗誤差を出す
    score = mean_squared_error(y_test, pred_y)
    return score

####線形回帰

# 線形回帰のとき
from sklearn.linear_model import LinearRegression
# モデルを構築
lr = LinearRegression()
# 平均二乗誤差を算出
lr_score = calc_model(lr)
lr_score
# >>>出力
0.02824050462867693

####Ridge回帰

# Ridge回帰のとき
from sklearn.linear_model import Ridge
# モデルを構築
ridge = Ridge()
# 平均二乗誤差を算出
ridge_score = calc_model(ridge)
ridge_score
# >>>出力
0.028202963714955512

####サポートベクターマシン回帰

# サポートベクターマシン回帰のとき
from sklearn.svm import SVR
# モデルを構築
svr = SVR()
# 平均二乗誤差を算出
svr_score = calc_model(svr)
svr_score
# >>>出力
0.08767857928794534

####ランダムフォレスト回帰

# ランダムフォレスト回帰のとき
from sklearn.ensemble import RandomForestRegressor
forest = RandomForestRegressor()
# 平均二乗誤差を算出
forest_score = calc_model(forest)
forest_score
# >>>出力
0.03268455739481754

結果として非線形回帰の平均二乗誤差は大きく出た。

テストデータの前処理

欠損値の有無

# テストデータの前処理
# Idの値を抜き出す
df_test_index = df_test['Id']
# 欠損値の確認
df_test = df_test[['OverallQual', 'YearBuilt', 'TotalBsmtSF', 'GrLivArea']]
df_test.isnull().sum()
# >>>出力
OverallQual    0
YearBuilt      0
TotalBsmtSF    1
GrLivArea      0
dtype: int64

TotalBsmtSFの欠損値を平均値で補完する。

# 欠損値を平均値で補完する
df_test['TotalBsmtSF'] = df_test['TotalBsmtSF'].fillna(df_test['TotalBsmtSF'].mean())
# 欠損値を確認する
df_test.isnull().sum()
# >>>出力
OverallQual    0
YearBuilt      0
TotalBsmtSF    0
GrLivArea      0
dtype: int64

欠損値はなくなった。

CSVファイルへ出力

# モデルを当てはめる
pred_y = ridge.predict(df_test)

# データフレームの作成
submission = pd.DataFrame({'Id': df_test_index,
                          'SalePrice': np.exp(pred_y)})
# CSVファイルに出力
submission.to_csv('submission.csv', index=False)

結果は、0.17184と結果は伸びず。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?