House Price3
HousePriceの順位が 324/1441で、
rmse が 0.12102にまで上がったので、一旦まとめようと思います。
こんな感じのコードです
データのインポート
import pandas as pd import matplotlib.pyplot as plt import numpy as np from scipy.stats import skew train = pd.read_csv('../input/train.csv') test = pd.read_csv('../input/test.csv')
テストデータと教師データをまとめて、skewを取り除く、
naデータを埋め合わせ、カテゴリカルデータをダミーに置き換える
all_data = pd.concat((train.loc[:,'MSSubClass':'SaleCondition'], test.loc[:,'MSSubClass':'SaleCondition'])) train["SalePrice"] = np.log1p(train["SalePrice"]) numeric_feats = all_data.dtypes[all_data.dtypes != "object"].index skewed_feats = train[numeric_feats].apply(lambda x: skew(x.dropna())) #compute skewness skewed_feats = skewed_feats[skewed_feats > 0.75] skewed_feats = skewed_feats.index all_data[skewed_feats] = np.log1p(all_data[skewed_feats]) all_data = pd.get_dummies(all_data) all_data = all_data.fillna(all_data.mean()) X_train = all_data[:train.shape[0]] X_test = all_data[train.shape[0]:] y = train.SalePrice
今回はlassoを使用
#### models selection from sklearn.linear_model import Ridge ridge = Ridge(alpha = 6.7) from sklearn.ensemble import RandomForestRegressor rfr = RandomForestRegressor(n_estimators=500, n_jobs=-1) from sklearn.linear_model import Lasso lasso = Lasso(alpha=0.0004) model = lasso ### prediction model.fit(X_train, y)
提出
preds = np.expm1(model.predict(X_test)) solution = pd.DataFrame({"id":test.Id, "SalePrice":preds}) solution.to_csv("ridge10.csv", index = False)
ほぼ人様のカーネルを丸パクリしただけです・・・・
それで、cvのスコアはいいのに、提出したらトンデモナイエラーが出たので、
なんぞ?と思ってたのですが、
skewを取り除くときに、
np.log1p( )
したら、提出する前に、
np.expm1()
して元に戻そうね。
ってだけの話でした。
他のアルゴリスムも試したのですが、lassoが一番良かったです。
RandomForestとか、XGBoostとかはまだ勉強してないので、
いまいちどうやってチューニングするか分かってないのでスルーしました。
感想
正規化した線形回帰に少し慣れたかな??って感じです。
Lassoの方がRidgeよりも成績が良かったってことは、
不要な次元が多かったってことでしょうか?
どういうデータにはどのアルゴリズムが適しているか、
判別できるように早くなりたいなーというこの頃です。