๋ชฉํ
- ๋จธ์ ๋ฌ๋๋ชจ๋ธ๋ง ์ train/test ๋ฐ์ดํฐ ๋ถ๋ฆฌํด์ผํ๋ ์ด์ ๋ฅผ ์๊ธฐ
- ๋ค์ค์ ํํ๊ท ์ดํด
- '์ผ๋ฐํ' ๊ด์ ์์ ๊ณผ์ ํฉ ๋ฐ ๊ณผ์์ ํฉ ์ดํด
- '์ผ๋ฐํ' ๊ด์ ์์ ํธํฅ ๋ฐ ๋ถ์ฐ์ ํธ๋ ์ด๋ ์คํ ๊ฐ๋ ์ดํด
train/test ๋ฐ์ดํฐ ๋๋๊ธฐ
- ๋ฐ์ดํฐ๋ฅผ ํ๋ จ/๊ฒ์ฆ ๋ฐ์ดํฐ๋ก ๋๋์ด์ผ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ชจ๋ธ์ ์์ธก ์ฑ๋ฅ์ ์ ๋๋ก ํ๊ฐ ๊ฐ๋ฅ
- ๋ชจ๋ธ๋ง์ ๋ชฉ์ ์ 'train data'๋ฅผ ์ ๋ง์ถ๋ ๊ฒ์ด ์๋๋ผ, ํ๋ จ์ ์ฌ์ฉํ์ง ์๋ 'test data'๋ฅผ ์ด์ฉํด์ ์ผ๋ง๋ ์ ๋ต์ ๋ด๋๋
๋๋๋ ๋ฐฉ๋ฒ์ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ฐ์ ์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์๋ค.(train์ด 75%, test๊ฐ 25%)
train = df.sample(frac=0.75, random_state=1)
test = df.drop(train.index)
์ฃผ์์ : ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์๋ก ์ ํํด์ ๋๋ ๋ ๊ด์ฐฎ์ง๋ง, ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ํตํด ๊ณผ๊ฑฐ์์ ๋ฏธ๋๋ฅผ ์์ธกํ๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ์ ๋ฌด์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ฉด ์๋ ๊ฒ์ด๋ค. ์ด ๋๋ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๊ฐ train , ๋ฏธ๋๊ฐ test ๊ฐ ๋์ด์ผํ ๊ฒ์ด๋ค.
๋ค์ค์ ํํ๊ท๋ชจ๋ธ ํ์ต(์์๋ฅผ ๋ค๊ณ ์งํ)
- ๊ธฐ์ค๋ชจ๋ธ(ํน์ฑX)
- ๋ค์ค์ ํํ๊ท๋ชจ๋ธ
import pandas as pd
df = pd.read_csv('https://ds-lecture-data.s3.ap-northeast-2.amazonaws.com/house-prices/house_prices_train.csv')
train['SalePrice'].mean()
target = 'SalePrice'
y_train = train[target]
y_test = test[target]
predict = y_train.mean()
# ๊ธฐ์ค๋ชจ๋ธ๋ก ํ๋ จ ์๋ฌ(MAE) ๊ณ์ฐ
from sklearn.metrics import mean_absolute_error
y_pred = [predict] * len(y_train) # ํ๊ท ๊ฐ์ ๋ฆฌ์คํธ ์์๋ฅผ 1095๊ฐ๋งํผ ๋ง๋ค์ด์ฃผ๋ ์์
mae = mean_absolute_error(y_train, y_pred)
# ํ
์คํธ ์๋ฌ(MAE)
y_pred = [predict] * len(y_test)
mae = mean_absolute_error(y_test, y_pred)
์๋ฅผ ํตํด ๊ธฐ์ค๋ชจ๋ธ์ ๋ํ ํ๊ฐ ๊ฐ๋ฅ
target = 'SalePrice'
features = ['GrLivArea', 'OverallQual'] # ๊ผญ target๊ณผ features๋ฅผ ๋จผ์ ์ง์ ํด๋๊ธฐ
X_train = train[features]
X_test = test[features]
# ๋ชจ๋ธ fit(train์ ๋ํด)
model.fit(X_train, y_train)
y_pred = model.predict(X_train)
mae = mean_absolute_error(y_train, y_pred)
# test์ ๋ํด
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
plotly๋ฅผ ํตํด ์์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํํด๋ณธ ์ฌ์ง์
๋๋ค.
๋จ์์ ํํ๊ท์์๋ ๋ชจ๋ธ์ด ์ง์ ์ด์ง๋ง, ์ฌ๊ธฐ์ ํน์ฑ์ด 2๊ฐ์ด๋ฏ๋ก ํ๋ฉด์ผ๋ก ํํ๋ฉ๋๋ค.
ํ๊ท๊ณ์ ํด์ ๋ฐ ๋ชจ๋ธ ํ๊ฐ
- ๋จ์์ ํํ๊ท์ : $$y = \beta_0 + \beta_1 x $$
- ๋ค์ค์ ํํ๊ท์(ํน์ฑ 2๊ฐ) : $$y = \beta_0 + \beta_1x_1 + \beta_2x_2$$
## ์ ํธ(intercept)๊ณผ ๊ณ์๋ค(coefficients)
model.intercept_, model.coef_
(-102743.02342270731, array([ 54.40145532, 33059.44199506]))
ํ๊ท๊ณ์๋ค์ ๋ณด๊ณ target๊ณผ feature์ ๊ด๊ณ๋ฅผ ์ด๋์ ๋ ์ ์ถ ๊ฐ๋ฅ
์ ํํ๊ท๋ ๋ค๋ฅธ ML ๋ชจ๋ธ์ ๋นํด ์๋์ ์ผ๋ก ํ์ต์ด ๋น ๋ฅด๊ณ ์ค๋ช ๋ ฅ์ด ๊ฐํจ. ํ์ง๋ง ์ ํ ๋ชจ๋ธ์ด๋ฏ๋ก ๊ณผ์์ ํฉ(underfitting; ํ์ต์ด ์ถฉ๋ถํ ๋ชป์ผ์ด๋๋ ๊ฒฝ์ฐ)์ด ์ ์ผ์ด๋๋ ๋จ์
ํ๊ท๋ชจ๋ธ ํ๊ฐ์งํ(Evaluation metrics, ์ค์)
- MSE (Mean Squared Error) =
$$\frac{1}{n}\sum_{i=1}^{n}(y_{i} - \hat{y_{i}})^{2}$$ - MAE (Mean absolute error) = $$\frac{1}{n}\sum_{i=1}^{n}\left | y_{i} - \hat{y_{i}} \right |$$
- RMSE (Root Mean Squared Error) =
$$\sqrt{MSE}$$ - R-squared (Coefficient of determination) =
$$1 - \frac{\sum_{i=1}^{n}(y_{i} - \hat{y_{i}})^{2}}{\sum_{i=1}^{n}(y_{i} - \bar{y_{i}})^{2}} = 1 - \frac{SSE}{SST} = \frac {SSR}{SST}$$ - ์ฐธ๊ณ
- SSE(Sum of Squares
Error
, ๊ด์ธก์น์ ์์ธก์น ์ฐจ์ด): $$\sum_{i=1}^{n}(y_{i} - \hat{y_{i}})^{2}$$ - SSR(Sum of Squares due to
Regression
, ์์ธก์น์ ํ๊ท ์ฐจ์ด): $$\sum_{i=1}^{n}(\hat{y_{i}} - \bar{y_{i}})^{2}$$ - SST(Sum of Squares
Total
, ๊ด์ธก์น์ ํ๊ท ์ฐจ์ด): $$\sum_{i=1}^{n}(y_{i} - \bar{y_{i}})^{2}$$ , SSE + SSR
- SSE(Sum of Squares
R^2์ธ์ MAE๋ ๋จ์ ์ ๋์ด ๊ฐ์ผ๋ฏ๋ก ๋ณด๋ค ํด์์ ์ฉ์ดํ ์ฅ์ ์ด ์๊ณ , MSE๋ ์ ๊ณฑ์ ํ๊ธฐ ๋๋ฌธ์ ์ด์์น์ ๋ณด๋ค ๋ฏผ๊ฐ
RMSE๋ ์ด๋ฐ MSE์ ๋จ์ ์ ๋ฃจํธ๋ฅผ ์์ ๋ณด์ํ ๊ฒ์ ๋๋ค.
๊ณผ์ ํฉ(Overfitting)๊ณผ ๊ณผ์์ ํฉ(Underfitting)
์ผ๋ฐํ(generalization)
- test data์์ ๋ง๋ค์ด๋ด๋ ์ค์ฐจ๋ฅผ ์ผ๋ฐํ ์ค์ฐจ์ ๋๋ค.
- ์ผ๋ฐํ๊ฐ ์๋ ๋ชจ๋ธ : train data์์์ ๊ฐ์ด test data์์๋ ์ข์ ์ฑ๋ฅ์ ๋ด๋ ๋ชจ๋ธ
- ๊ณผ์์ ํฉ๋ณด๋จ ๊ณผ์ ํฉ(๋ชจ๋ธ์ด train set์ ๊ณผํ๊ฒ ํ์ต๋ ๊ฒฝ์ฐ)์ด ๋ ์์ฃผ ์๊ณ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ค์ํ ์ผ๋ฐํ ๋ฐฉ๋ฒ์ด ์กด์ฌ
- test data์์ ์ค์ฐจ๊ฐ ์ ๊ฒ ๋์ค๋ ๊ฒ ์ด์์ , ๊ทธ๋ฌ๋ ํ์ค์ ์ผ๋ก ๋ชจ๋ data๋ฅผ ์ป์ ์ ์๊ธฐ์ train data๋ก๋ถํฐ ์ต๋ํ ์ผ๋ฐํ๊ฐ ์ ๋ ๋ชจ๋ธ์ ํ์ต์์ผ์ผํฉ๋๋ค.
๊ณผ์ ํฉ(Overfitting) : ๋ชจ๋ธ์ด train data์ ์ฑ์ง์ ๊ณผํ๊ฒ ํ์ตํด์ test data์์๋ ์ค์ฐจ๊ฐ ์ปค์ง๋ ํ์
๊ณผ์์ ํฉ(Underfitting) : ๋ชจ๋ธ์ด train data์ ํ์ตํ์ง ๋ชปํด, ๊ฒฐ๊ตญ train/test data ๋ชจ๋์์ ์ค์ฐจ๊ฐ ํฐ ๊ฒฝ์ฐ
๋จธ์ ๋ฌ๋ ๊ณผ์ ์ค์์ ๊ณผ์ ํฉ์ ํผํ ์ ์๋ ๋ฌธ์ ์ด๊ณ ์์ ํ ๊ทน๋ณตํ ์ ์๋ค. ํด์ ๋๋ถ๋ถ ํ์ต์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฐ ๊ณผ์ ํฉ์ ์ํ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
๋ถ์ฐ(Variance)๊ณผ ํธํฅ(Bias)
์์ ๊ณผ์ ํฉ/๊ณผ์์ ํฉ๊ณผ ์ฐ๊ด
- ๋ถ์ฐ์ด ๋์ ๊ฒฝ์ฐ(ํธํฅ์ด ๋ฎ์ ๊ฒฝ์ฐ) : ๋ชจ๋ธ์ด train data์ noise์ ๋ฏผ๊ฐํ๊ฒ ์ ํฉํ์ฌ test data์ ์ผ๋ฐํ๋ฅผ ๋ชปํ ๊ฒฝ์ฐ ์ฆ, ๊ณผ์ ํฉ
- ํธํฅ์ด ๋์ ๊ฒฝ์ฐ(๋ถ์ฐ์ด ๋ฎ์ ๊ฒฝ์ฐ) : ๋ชจ๋ธ์ด train data์ ํน์ฑ ๋ฐ ํ๊ฒ ๋ณ์์ ๊ด๊ณ๋ฅผ ์ ํ์ ํ์ง ๋ชปํ ๊ฒฝ์ฐ ์ฆ, ๊ณผ์์ ํฉ
MSE๋ฅผ reducible๊ณผ irreducible error๋ก ๋๋๋ฉด ๊ฒฐ๊ตญ Bias error ์ 'Variance + irreducible error' ๋ก ๋๋๊ฒ ๋ฉ๋๋ค.
$${\displaystyle \operatorname {E} _{D}{\Big [}{\big (}y-{\hat {f}}(x;D){\big )}^{2}{\Big ]}={\Big (}\operatorname {Bias} _{D}{\big [}{\hat {f}}(x;D){\big ]}{\Big )}^{2}+\operatorname {Var} _{D}{\big [}{\hat {f}}(x;D){\big ]}+\sigma ^{2}}$$
$${\displaystyle \operatorname {Bias} _{D}{\big [}{\hat {f}}(x;D){\big ]}=\operatorname {E} _{D}{\big [}{\hat {f}}(x;D){\big ]}-f(x)}$$
$${\displaystyle \operatorname {Var} _{D}{\big [}{\hat {f}}(x;D){\big ]}=\operatorname {E} _{D}[{\big (}\operatorname {E} _{D}[{\hat {f}}(x;D)]-{\hat {f}}(x;D){\big )}^{2}]}$$
์์
์ผ์ชฝ : ๋จ์์ ํ๋ชจ๋ธ๋ก ํ์ตํ ๊ฒฝ์ฐ
์ค๋ฅธ์ชฝ : ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ชจ๋ ์ง๋๊ฐ๋๋ก ๊ณก์ ํผํ
์ด ๊ฐ๋ฅํ ๋คํญ๋ชจ๋ธ๋ก ํ์ตํ ๊ฒฝ์ฐ(๋ชจ๋ธ์ ๋ณต์ก๋๊ฐ ์ข ๋ ๋์ ๊ฒฝ์ฐ)
์ผ์ชฝ์ ๊ฒฝ์ฐ, train data์ target๊ณผ ์ค์ฐจ๊ฐ ํผ == 'ํธํฅ์ด ๋์' ๊ทธ๋ฌ๋, test data์ target๊ณผ๋ ์ค์ฐจ๊ฐ ์์ด์ ๋ ๋ฐ์ดํฐ์์์ ์ค์ฐจ๊ฐ ๋น์ทํจ == '๋ถ์ฐ์ด ๋ฎ์' -> ๊ณผ์์ ํฉ
์ค๋ฅธ์ชฝ์ ๊ฒฝ์ฐ, train data์ target๊ณผ ์ค์ฐจ๊ฐ ์์ == 'ํธํฅ์ด ๋ฎ์' ๊ทธ๋ฌ๋, test data์ target๊ณผ๋ ์ค์ฐจ๊ฐ ๋งค์ฐ ์ปค์ ๋ ๋ฐ์ดํฐ์์์ ์ค์ฐจ๊ฐ ๋งค์ฐ ์ฐจ์ด๋จ == '๋ถ์ฐ์ด ๋์' -> ๊ณผ์ ํฉ
๋ง๋ค๊ธฐ ์ฝ์ง ์์ง๋ง, ํธํฅ๋ ์ ๊ณ ๋ถ์ฐ๋ ์ ์ ๋ชจ๋ธ์ด ์ ์ผ best
์ด๋ค ๋ชจ๋ธ์ ํ์ต์ํค๋ train/test data ์์์ ๋ชจ๋ธ ์ฑ๋ฅ๊ณผ ๊ทธ ์ฐจ์ด๋ฅผ ๋ณด๊ณ ๊ณผ์ ํฉ ๋ฐ ๊ณผ์์ ํฉ์ ์ ์ ํ๊ฒ ๊ตฌ๋ถํด ๋ผ ์ ์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ชจ๋ธ์ด ๋ณต์กํด์ง์๋ก train data์์์ ์ฑ๋ฅ์ ๊ณ์ ์ฆ๊ฐํ๋๋ฐ, ๊ฒ์ฆ๋ฐ์ดํฐ(์ฌ๊ธฐ์ test data๋ก ํ์)์์์ ์ฑ๋ฅ์ ์ฆ๊ฐํ๋ค๊ฐ ๊ฐ์ํ๋ ์ง์ ์ด ๋ฐ์ํฉ๋๋ค. ์ด ์ง์ ์ด ๊ณผ์ ํฉ์ด ์์๋๋ ์์ ์ผ๋ก ๋ ๋ณต์กํ ๋ชจ๋ธ์ ํ์ต์ํฌ ํ์๊ฐ ์์ด์ง๋๋ค.
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]26.Logistic Regression(๋ก์ง์คํฑ ํ๊ท; ๋ถ๋ฅ) (0) | 2021.12.22 |
---|---|
[TIL]25.Ridge Regression(๋ฅํ ํ๊ท) (0) | 2021.12.21 |
[TIL]23.Simple Regression(๋จ์ํ๊ท) (0) | 2021.12.18 |
[TIL]22.Section Challenge ๋ฐ ๋ณต์ต (0) | 2021.12.17 |
[TIL]21.Session ๋ณต์ต (0) | 2021.12.16 |