Regularized Linear Models
https://www.kaggle.com/apapiu/regularized-linear-models
- 숫자를 log_transform 하는게 핵심!
matplotlib.rcParams['figure.figsize'] = (12.0, 6.0)
prices = pd.DataFrame({"price":train["SalePrice"], "log(price + 1)":np.log1p(train["SalePrice"])})
prices.hist()
- rcParmas
- 그래프를 그리기 위해서 사용
- 딕셔너리 값을 이용해서 그림
- log(price + 1)을 이용하여 치우친 숫자를 좀 완화시킴
- 정규화 됨
skewed_feats = train[numeric_feats].apply(lambda x: skew(x.dropna())) #compute skewness
skewed_feats
all_data = pd.get_dummies(all_data)
- get_dummies를 이용하여 결측값 제외하고 0과 1로 구성된 더미값이 만들어짐
- dummy_na = True를 이용하면, 결측값도 인코딩하여 처리해줌
def rmse_cv(model):
rmse= np.sqrt(-cross_val_score(model, X_train, y, scoring="neg_mean_squared_error", cv = 5))
return(rmse)
- rmse
- cross_val_score를 사용해서 rmse를 알아본다.
- rmse는 낮을 수록 정확도가 높다고 보면 된다.
matplotlib.rcParams['figure.figsize'] = (6.0, 6.0)
preds = pd.DataFrame({"preds":model_lasso.predict(X_train), "true":y})
preds["residuals"] = preds["true"] - preds["preds"]
preds.plot(x = "preds", y = "residuals",kind = "scatter")
- lasso 모델이 예측한 x_train값을 preds로
- true 행을 실제 y값으로해서
residuals를 [실제값 - 예측한 값]
xgboost
# DMatrix : 전용 데이터 셋
dtrain = xgb.DMatrix(X_train, label = y)
dtest = xgb.DMatrix(X_test)
params = {"max_depth":2, "eta":0.1}
model = xgb.cv(params, dtrain, num_boost_round=500, early_stopping_rounds=100)
- 파라미터
- eta
- max_depth
- 깊이라고 생각하면 됨
- 높으면 특정 피쳐 조건에 특화 됨 -> 과적합 가능성 높음
- 3~10 사이 값 적용
- CV()
- early_stopping_rounds
- 조기중단,
- 예측 오류가 더이상 개선 안 되면 반복 끝까지 수행하지 않고 중지
- num_boost_rounds
https://velog.io/@sset2323/04-06.-XGBoosteXtra-Gradient-Boost
model_xgb = xgb.XGBRegressor(n_estimators=360, max_depth=2, learning_rate=0.1)
model_xgb.fit(X_train, y)
- 회귀를 위한 XGBRegressor
- eta -> learning_rate
- n_extimators : 생성될 트리의 개수
[결론]
- tain, test합치고
- 타입이 object아닌 값 중에서 비대칭도가 왼쪽으로 0.75 치우친 값만 log취함
- ridge 모델, lasso모델 비교 -> rmse값이 lasso가 낮아서 선택함
- xgboost 값 비교함
- xgboost 값 * 0.7 + lasso * 0.3 더했음 ( 왜 더했는지 모르겠다,,)