1) ๋ณธ์ธ๋ง์ ์์ด๋์ด๋ก best ridge regression model์ ๋ง๋ค์ด ์๋ก ๊ณต์ ํ์๊ณ ํ ๋ก ํด ๋ณด์ธ์.
- ์ด๋ค ํน์ฑ๊ณตํ์ ์ฌ์ฉํ๊ณ , ๊ทธ ์ด์ ์ ๊ธฐ๋ํจ๊ณผ๋ ๋ฌด์์ด์๋์?
์ฒ์ ๋ณ์๋ 'Rooms, Type, Price, Method, Postcode, Regionname, Propertycount, Distance, CouncilArea' ์
๋๋ค.
์ด ์ค OneHotencoding์ ์ผ๋์ ๋๊ณ unique ๊ฐ์ด ๋๋ฌด ๋ง๋ค๊ณ ํ๋จํ ๋ณ์๋ drop ํด์ฃผ์์ต๋๋ค.
๋ 'Postcode' ๊ฐ์ ๊ฒฝ์ฐ ์ซ์ํ ๋ฐ์ดํฐ์ธ๋ฐ ๊ทธ ์์(ํฌ๊ธฐ)๊ฐ ์๋ฏธ๊ฐ ์์ ๊ฒ์ด๋ผ ํ๋จํ๊ณ ์ฐจ๋ผ๋ฆฌ Regionname์ ์ํซ์ธ์ฝ๋ฉ์ ํตํด ๊ทธ ์ง์ญ์ ๋ํ ๋ณ์๋ก ๋์
ํด์ฃผ๋ ๊ฒ ์ณ๋ค ์๊ฐํ์ฌ dropํ์์ต๋๋ค.
๋, ํ๊ฒ์ธ 'Price'์ ๋ํด ๊ต์ฅํ ์ฃผ๊ด์ ์ด์ง๋ง, displot์์ ์ฝ 4๋ฐฑ๋ง๋ถํฐ๋ ๊ฑฐ์ ์๋ฏธ๊ฐ ์๋ค๋ ์๊ฐ์ ํ๊ณ , ํผ์ผํ ์ด์ง๋ก ์์ 5%์ ํด๋นํ๋ ๊ฐ์ด 2,115,000์ด์ด์ 4,000,000 ์ด์์ dropํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ์๋๋ฆฌ๋ผ ์๊ฐํ์ฌ drop ํด์ฃผ์์ต๋๋ค.
์ฌ์ค ์ด๋ฒ ๊ณผ์ ์์๋ ์ด๋ค ์๋ก์ด ๋ณ์๋ฅผ ๋ง๋๋ ๊ฒ์๋ ์ ํ์ด ์๋ ๊ฒ ๊ฐ์, ์ ์ฃผ๊ด์ ๊ฐ์ ํด์ ๋ณ์๋ฅผ ์ ํํด์ ๋ชจ๋ธ๋ง์ ํด๋ณด์ ๋ผ๋ ๋ง์์ผ๋ก ์งํํ์ต๋๋ค.
- ๋ชจ๋ธ ์ฑ๋ฅ ํ๊ฐ ์งํ๋ ๋ฌด์์ผ๋ก ์ ์ ํ๊ณ , ์ ์ ํ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
R-squared score๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ํ๊ท ๋ชจ๋ธ์ ์ ์ฉํ๊ณ , MAE๋ MSE, RMSE๋ณด๋ค ์ง๊ด์ ์ผ๋ก ํด์์ด ๋๋ค ์๊ฐํ์์ต๋๋ค. (์ฌ์ค ์์ง MAE๋ MSE๋ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ชจ๋ธ์ ๋ํ ํ๊ฐ๊ฐ ๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์๋์ ์ธ ํ๊ฐ๋ ๊ฐ๋ฅํ๋ฐ, ์ด ์์น๋ง ๋ณด๊ณ ์ ๋์ ์ธ ํ๊ฐ๋ ์ด๋ ค์ด ๊ฒ ๊ฐ์ต๋๋ค.)
- ์ด๋ ํ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ , ์ด๋ค ํ๋์ ์งํํ๋์? ํ ์คํธ์ ์ ์ฑ๋ฅ ๋ณํ๋ ์ด๋ ํ๊ฐ์?
# ์ํซ์ธ์ฝ๋ฉ
from category_encoders import OneHotEncoder
encoder = OneHotEncoder(use_cat_names=True)
X_train_encoded = encoder.fit_transform(X_train)
X_val_encoded = encoder.transform(X_val)
X_test_encoded = encoder.transform(X_test)
# ์ค์ผ์ผ๋ง
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train_encoded)
X_val_scaled = scaler.transform(X_val_encoded)
X_test_scaled = scaler.transform(X_test_encoded)
# SelectKBest๋ฅผ ์ด์ฉํ์ฌ ๋ณ์ ์ ํ์ ํด๋ณด๋ ค๋ค, ์ผ๋จ ์ ์ฒ๋ฆฌ์์ ์ฃผ๊ด์ ์ธ ํ๋จ์ ํ ๋ณ์์ ๋ํด์ ๋ชจ๋ธ๋ง์ ํด๋ณด๊ณ ์ถ์ด ์ ์ฉํ์ง ์์์ต๋๋ค.
# RidgeCV๋ฅผ ์ ์ฉํ์ฌ ์ต์ ์ alpha๊ฐ ๋ฐ best score ํ์ธ
from sklearn.linear_model import RidgeCV
alphas = [10, 15, 20, 30, 50, 55]
model_ridCV = RidgeCV(alphas=alphas, cv=5)
model_ridCV.fit(X_train_scaled, y_train)
print(model_ridCV.alpha_, model_ridCV.best_score_)
50 0.5492099892389389
์ ์๊ฐ ์์ ๊ธฐ๋ณธ๊ณผ์ ๋ณด๋ค ๋ ๋จ์ด์ก์ต๋๋ค. ํด์ ์ด๋ฅผ ๊ทน๋ณตํด๋ณด๊ณ ์ Polynomial ํด๋ณด์์ต๋๋ค.
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2)
X_train_final = poly.fit_transform(X_train_scaled)
X_val_final = poly.transform(X_val_scaled)
X_test_final = poly.transform(X_test_scaled)
# ์ดํ ๋ค์ RidgeCV ๋ก ์ต์ ์ ์ ์ ์ฐพ๊ธฐ
from sklearn.linear_model import RidgeCV
alphas = [100, 150, 200]
model_ridCV = RidgeCV(alphas=alphas, cv=2)
model_ridCV.fit(X_train_final, y_train)
print(model_ridCV.alpha_, model_ridCV.best_score_)
100 0.6521438103483567
from sklearn.linear_model import Ridge
model = Ridge(alpha=100)
model.fit(X_train_final, y_train)
print(model.score(X_train_final, y_train))
print(model.score(X_val_final, y_val))
print(model.score(X_test_final, y_test))
0.6560498372961219 -> train set์๋ํ score
0.6456660001791444 -> val set์ ๋ํ score
0.6389513647806122 -> test set์ ๋ํ score
๋คํญํจ์๋ก ๋ณํ ์ score๊ฐ ํ์ฐํ๊ฒ ์ฆ๊ฐํ์์ต๋๋ค. ๋จ์ํ๊ฒ ์๊ฐํด์ ์ํซ์ธ์ฝ๋ฉ์ ์ํํ๋ฉด ์ปฌ๋ผ๊ฐ์(๋ณ์๊ฐ์)๊ฐ ์๋์ ์ผ๋ก ๋ง์์ง๊ฒ ๋๊ณ , ์ด ๋ถ๋ถ์ ๋จ์ linear ํ๊ฒ๋ง ๋ชจ๋ธ๋งํด์ score๊ฐ ๋๊ฒ ๋์ค๊ธฐ ์ด๋ ต๋ค ํ๋จ์ด ๋ฉ๋๋ค. ํด์ ๋คํญํจ์ํํด์ฃผ๋ฉด ๋ง์ ๋ณ์์ ๋ํ ๋ณต์ก์ฑ์ ์ ์ก์์ฃผ๋ ๊ฒ ์๋๊น ์๊ฐํฉ๋๋ค.
- ๊ณผ์ ์ํ ์ค ๋ถ๋ชํ๋ ์ด๋ ค์์ด๋ ๋ชจ๋ฅด๋ ์ ์ด ์์๋์? ์์๋ค๋ฉด ์ด๋ป๊ฒ ํด๊ฒฐํด ๋ณผ ์ ์์๊น์?
๋ ๊ทธ๋ ์ง๋ง, ์ฒ์ ๋ณ์(์ปฌ๋ผ)์ ๋ํด ๋ค๋ฃจ๋ ๊ฒ ์ ์ผ ์ด๋ ค์ด ๊ฒ ๊ฐ์ต๋๋ค. ์๋ก์ด ๋ณ์๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ ๊ฑฐํ๋ ๋ถ๋ถ์์ ๊ทธ ์ด์ ๋ฅผ ์ค๋ช ํ ์ ์๋ ํต๊ณ์ ์ธ ๊ธฐ๋ฐ, ๋๋ฉ์ธ ์ง์ ํน์ ํ๋ค๋ชปํด ์๊ฐํ ์๋ฃ๋ผ๋ ํ๋น์ฑ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ ์ฝ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ง ๋๋ฌด ๋ฏธ๋นํด์ ๋ฐฐ์๋๊ฐ์ผ๊ฒ ์ง๋ง, ๋ชจ๋ธ์ ์ ์ ํ๊ณ ๋ชจ๋ธ์ ํ์ดํผํ๋ผ๋ฏธํฐ ๋ฑ์ ์กฐ์ ํ๋ ๊ฒ๋ ์ฝ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ปฌ๋ผ๋ณด๋ค๋ ์ง๊ด์ ์ผ๋ก ๋๋์ด ์์ค๋ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ๊ทธ๋ฅ ๋จ์ํ๊ฒ ์ซ์ ๋์ ํ๋ฉด์ ์กฐ์ ํ๋ ๊ฒ ๋ง๋๊ฑด์ง, ์ด๋ค ์๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์กฐ์ ์ ํ๋๊ฑด์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ถํ ์ด ๋ถ๋ถ์ ๋ฐฐ์ธ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค. :)
2) ์ํซ์ธ์ฝ๋ฉ์์ ๋ชจ๋ ๋ฒ์ฃผํ ๊ฐ(uniqueํ)์ ์ปฌ๋ผ์ผ๋ก ์ธ์ฝ๋ฉํ ๊ฒฝ์ฐ ์ด๋ค ๋ฌธ์ ์ ์ด ๋ฐ์ํ ์ ์๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์๋์ง์ ๋ํ์ฌ ์กฐ์ฌํ ํ ํจ๊ป ๋ ผ์ํด ๋ณด์ธ์.
์ฐจ์์ ์ ์ฃผ(๋ณ์๊ฐ ๋๋ฌด ๋ง์์ ์๊ธฐ๋ ๊ณผ์ ํฉ)์ด ๋ฐ์ํฉ๋๋ค.
- ๋จผ์ ๋จ์ํ๊ฒ, ์ปฌ๋ผ์ด ๋๋ฌด ๋ง์ด ์๊ธฐ๋(์นดํ ๊ณ ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์) ์ปฌ๋ผ์ drop์ ๊ณ ๋ฏผ ํน์ ์๊ด๊ณ์๊ฐ ๋์ ๋ค๋ฅธ ์ฐ์ํ ๋ณ์์ ์์กดํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ ๊ฐ์ต๋๋ค.
- ์์ ๋ฐฉ๋ฒ์ด ์๋๋ค๋ฉด ์ํซ์ธ์ฝ๋ฉ์ ์ ์ฉ ํ, ์ปฌ๋ผ์ ์ค์ด๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ๋ฐฉ๋ฒ์๋ selectKBest๋ฅผ ์ด์ฉํด์ ๋ณ์๋ฅผ selectํ๋ ๋ฐฉ๋ฒ์ด ์๊ณ ํด๋ณด์ง ์์์ง๋ง, ์ค๋ช ๋ ฅ์ ๊ฐ์ํ๊ณ PCA๋ฅผ ํตํด ์ฐจ์์ ์ถ์ํ๋ ๋ฐฉ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
- ๋ง์ฝ ์ด๋๋ ์ปฌ๋ผ์ด ์ค์ด๋ค์ง ์๋๋ค๋ฉด, ๋ชจ๋ธ ์์ฒด๋ฅผ linear regression์ฒ๋ผ ๋น๊ต์ ๋จ์ํ ๋ชจ๋ธ์ fittingํ์ง๋ง๊ณ Polynomialํ์ฌ ๋คํญํจ์ํํ์ฌ ํ์ต์ํค๋ ๊ฒ๋ ๊ทธ ๋ณต์ก๋๋ฅผ ํด์ํ ์ ์๋ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ์๋๊น ์๊ฐํฉ๋๋ค.
3) ํน์ง์ ํ(feature selection) ๋ฐฉ๋ฒ๋ค์ ๋ํ์ฌ ์กฐ์ฌํ ํ ํจ๊ป ๋ ผ์ํด ๋ณด์ธ์.
Feature selection?
- ๋ชจ๋ธ๋ง ์ raw data์ ๋ชจ๋ feature๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ computing power ์ memory ์ธก๋ฉด์์ ๋งค์ฐ ๋นํจ์จ์ ์ ๋๋ค
- ํด์ ์ผ๋ถ ํ์ํ feature๋ง ์ ํํด์ ์ฌ์ฉํ๋ ๊ฒ
์ถ๊ฐ)
Feature Engineering : ๋๋ฉ์ธ ์ง์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์์ ํผ์ณ๋ฅผ ๋ณํ/์์ฑ
Feature Extraction : ์ฐจ์์ถ์ ๋ฑ ์๋ก์ด ์ค์ ํผ์ณ๋ฅผ ์ถ์ถ
Feature Selection : ๊ธฐ์กด ํผ์ณ์์ ์ํ๋ ํผ์ณ๋ง (๋ณ๊ฒฝํ์ง ์๊ณ ) ์ ํ
์ด๋ฐ ๊ตฌ๋ถ์ด ์์ด์ ๋ด์ฉ ์ฒจ๋ถํ์์ต๋๋ค.
Feature selection์ ์ฅ์
- ์ฌ์ฉ์๊ฐ ํด์ํ๊ธฐ ์ฝ๊ฒ ๋ชจ๋ธ์ ๋จ์ํ
- ํ๋ จ ์๊ฐ์ ์ถ์
- ์ฐจ์์ ์ ์ฃผ ๋ฐฉ์ง
- ์ผ๋ฐํ
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ selection์ ์งํํ ๊ฒ์ธ๊ฐ?
์๊ฐํด๋ณด๋ฉด feature๋ฅผ ๊ณ ๋ฅด๋ ๊ฒ์ feature์ ๋ํ subset์ ์ถ์ถํ๋ ๊ฐ๋ ์ด๋ฏ๋ก ๋ ธ๊ฐ๋ค๋ง ๊ฐ๋ฅํ๋ค๋ฉด ๋ค์ํ๊ฒ feature๋ฅผ ๋ฝ๊ณ score๊ฐ ๋์ subset์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ค์ ์ผ๋ก ์๊ฐ, ์์ ๋ฉด์์ ๋นํจ์จ์ ์ด๊ธฐ์ ์ ํฌ๋ ๊ฐ์ฅ ์ต๋ํ ํจ์จ์ ์ผ๋ก selection์ ์งํํด์ผํฉ๋๋ค.
- Filter Method
- ํต๊ณ์ ์ธก์ ๋ฐฉ๋ฒ(chi-square test, correlation coefficient with heatmap ๋ฑ)์ ์ฌ์ฉํ์ฌ ํผ์ฒ๊ฐ์ ์๊ด๊ด๊ณ๋ฅผ ์์๋ด๊ณ ๋์ ์๊ด๊ณ์๋ฅผ ๊ฐ์ง๋ ํผ์ฒ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ํ์ง๋ง, ์ ํฌ๊ฐ ๋ชจ๋ธ๋งํด๋ณด๋ฉด ์๋ค์ํผ ์๊ด๊ณ์๊ฐ ๋๋ค๊ณ ๋ฐ๋์ ๋ชจ๋ธ์ ์ ํฉํ ํผ์ฒ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
- Wrapper Method
- ์์ธก ์ ํ๋์์ ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ณด์ด๋ Feature subset์ ๋ฝ์๋ด๋ ๋ฐฉ๋ฒ
- ๊ธฐ์กด ๋ฐ์ดํฐ์ ํ ์คํธ๋ฅผ ์งํํ hold-out set์ ๋ฐ๋ก ๋์ด์ผํฉ๋๋ค.
- ์ฌ๋ฌ๋ฒ ๋จธ์ ๋ฌ๋์ ์งํํ๊ธฐ์ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋๊ฒ ๋ฐ์ํฉ๋๋ค.
- ๊ณ ์ ๋์ ๋์ด ์จ๋ค๊ณ ๊ทธ๋๋ ์ฐพ๊ฒ ๋ best feature subset์ ํ์คํ ์ฑ๋ฅ์ ๋ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ด ์กด์ฌํฉ๋๋ค.
Forward Selection(์ ์ง์ ํ) : ๋ณ์๊ฐ ์๋ ์ํ์์ ํ๋์ฉ ์ถ๊ฐํ๋ฉด์ ์งํ
Backward Elimination(ํ๋ฐฉ์ ๊ฑฐ) : ์ ์ง์ ํ๊ณผ ๋ฐ๋๋๋ ๊ฐ๋
์ผ๋ก ์ ๋ถ ๋ค ๋ฃ๊ณ ํ๋์ฉ ๋นผ๋ฉด์ ์งํ
Stepwise Selection(๋จ๊ณ๋ณ์ ํ) : ์ 2๊ฐ์ ๋ฐฉ๋ฒ์ ๊ฒฐํฉํด์ ์ฌ์ฉํ๋ ๋ฐฉ์
- Embeded Method
- ์์ 1๋ฒ Filtering๊ณผ Wrapper์ ์ฅ์ ์ ๊ฒฐํฉํ ๋ฐฉ๋ฒ
- ๊ฐ๊ฐ์ feature๋ฅผ ์ง์ ํ์ตํ๋ฉฐ, ๋ชจ๋ธ์ ์ ํ๋์ ๊ธฐ์ฌํ๋ feature๋ฅผ ์ ํํฉ๋๋ค.
- ๊ณ์๊ฐ 0์ด ์๋ feature๊ฐ ์ ํ๋์ด, ๋ ๋ฎ์ ๋ณต์ก์ฑ์ ๋ชจ๋ธ์ ํ๋ จํ๋ฉฐ ํ์ต ์ ์ฐจ๋ฅผ ์ต์ ํํฉ๋๋ค.
์๋์ ๊ฐ์ ๋ฐฉ์์ด ์กด์ฌํฉ๋๋ค.
Lasso : L1-norm์ ํตํด ์ ์ฝ์ ์ฃผ๋ ๋ฐฉ๋ฒ
Ridge : L2-norm์ ํตํด ์ ์ฝ์ ์ฃผ๋ ๋ฐฉ๋ฒ
Elastic Net : ์ 2๊ฐ์ ์ ์ฝ์ ์ ํ๊ฒฐํฉํ ๋ฐฉ๋ฒ
SelectFromModel : DecisionTree ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ์์ ํผ์ฒ๋ฅผ select
์ด์์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. :)
'๐ฟ Data > ์ด๋ชจ์ ๋ชจ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
category_encoders(TargetEncoder, CatBoostEncoder) ๊ทธ๋ฆฌ๊ณ Ordinal๊ณผ OneHot encoder (0) | 2021.12.28 |
---|---|
์๊ฐํ๋ฅผ ํตํด ํ์ธํ Imputer์ ์ฐจ์ด (0) | 2021.12.26 |
์๋ก์ด ํน์ฑ(ํน์ฑ๊ณตํ), ์ด์์น, Scaler, ๋ชจ๋ธ ์ฑ๋ฅ ํฅ์ (0) | 2021.12.23 |
Kaggle_House Sales in King County, USA (0) | 2021.12.21 |
Simple Linear Regression(๋จ์์ ํํ๊ท) (0) | 2021.12.17 |