テスト

テスト

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よりも成績が良かったってことは、
不要な次元が多かったってことでしょうか?

どういうデータにはどのアルゴリズムが適しているか、
判別できるように早くなりたいなーというこの頃です。