Codelog
[AIB] OLS, MAE, RSS, Simple Regression ๋ณธ๋ฌธ
๐ก ์ง๋ํ์ต (Supervised Learning) : Comparing Classification & Regression
Purpose
- Supervised Classification → Is this A or B?
- Regression → How much / How many?
output type
- Supervised Classification → discrete output (class or label ํ์)
- Regression → continuous output (number ํ์)
what are you trying to find
- Supervised Classification → decision boundary
- Regression → best fit line
evalution
- Supervised Classification → accuracy
- Regression → sum of squared error or r squared
๐ก ๊ธฐ์ค๋ชจ๋ธ (Baseline Model)
์์ธก ๋ชจ๋ธ์ ๊ตฌ์ฒด์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ ์ ๊ฐ์ฅ ๊ฐ๋จํ๋ฉด์ ์ง๊ด์ ์ธ, ์ต์ํ์ ์ฑ๋ฅ์ ๋ํ๋ด๋ ๋ชจ๋ธ์ ๊ธฐ์ค๋ชจ๋ธ ์ด๋ผ ํ๋ค.
๊ธฐ์ค๋ชจ๋ธ์ ๋ฌธ์ ๋ณ๋ก ๋ค๋ฅด๊ฒ ์ค์ ํ๋ค.
- ๋ถ๋ฅ๋ฌธ์ : ํ๊ฒ์ ์ต๋น ํด๋์ค
- ํ๊ท๋ฌธ์ : ํ๊ฒ์ ํ๊ท ๊ฐ
- ์๊ณ์ดํ๊ท๋ฌธ์ : ์ด์ ํ์์คํฌํ์ ๊ฐ
๐ก ์ต์์ ๊ณฑ๋ฒ, ์ต์์์น๋ฒ (Least Square Method, Ordinary Least Squares)
์ด๋ค ๊ณ์ ํด๋ฐฉ์ ์์ ๊ทผ์ฌ์ ์ผ๋ก ๊ตฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๊ทผ์ฌ์ ์ผ๋ก ๊ตฌํ๋ ค๋ ํด์ ์ค์ ํด์ ์ค์ฐจ์ ์ ๊ณฑ์ ํฉ์ด ์ต์๊ฐ ๋๋ ํด๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
(x,y) ๋ฐ์ดํฐ ์งํฉ์ผ๋ก ์ ํํ๊ท๋ชจ๋ธ(Linear Regression) ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ
๐ก ํ๊ท ์ ๋์ค์ฐจ (mean absolute error, MAE)
์๋ฌ๊ฐ์ ์ ๋๊ฐ์ ์ทจํ ํ ํ๊ท ์ ๋ธ ๊ฐ
mae๋ ๋ค๋ฅธ ์ค์ฐจ๊ณ์ฐ๋ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ์๋ฌ๊ฐ๊ณผ ์ค์ ํ๊ฒ ๋ฐ์ดํฐ์ ๊ฐ์ ๋จ์๊ฐ ๊ฐ์์ ์ฝ๊ฒ ๋น๊ตํ ์ ์๋ค.
# df : ์ฃผํ ํ๋งค ๊ฐ๊ฒฉ์ ์์ธกํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ
# ํ๊ท๋ฌธ์ ์ ๊ธฐ์ค๋ชจ๋ธ
predict = df['SalePrice'].mean()
# ์๋ฌ๊ฐ ๊ณ์ฐ
errors = df['SalePrice'] - predict
# mae ๊ณ์ฐ
mae = errors.abs().mean()
โจ ํ๊ท๋ชจ๋ธ์ ์์ธก๋ชจ๋ธ ํ์ฉ
ํ๊ท๋ฌธ์ ๋ฐ์ดํฐ์ scatterplot์ ๊ฐ์ฅ ์ ๋ง๋ ์ง์ (best fit)์ ๊ทธ๋ ค์ฃผ๋ฉด ๊ทธ๊ฒ์ด ํ๊ท์์ธก๋ชจ๋ธ์ด ๋๋ค.
ํ๊ท๋ถ์์์ ์ค์ํ ๊ฐ๋ ์ ์์ธก๊ฐ๊ณผ ์์ฐจ(residual)์ด๋ค. ์์ธก๊ฐ์ ๋ง๋ค์ด์ง ๋ชจ๋ธ์ด ์ถ์ ํ๋ ๊ฐ์ด๊ณ ,
์์ฐจ๋ ์์ธก๊ฐ๊ณผ ๊ด์ธก๊ฐ์ ์ฐจ์ด์ด๋ค. (์ค์ฐจ๋ ๋ชจ์ง๋จ์์์ ์์ธก๊ฐ๊ณผ ๊ด์ธก๊ฐ์ ์ฐจ์ด๋ฅผ ๋งํจ.)
ํ๊ท์ง์ ์ ์์ฐจ ์ ๊ณฑ๋ค์ ํฉ์ธ RSS(Residual Sum of Squares)๋ฅผ ์ต์ํํ๋ ์ง์ ์ด๋ค.
RSS๋ SSE(Sum of Square Error)๋ผ๊ณ ๋ ๋งํ๋ฉฐ, ์ด ๊ฐ์ด ํ๊ท๋ชจ๋ธ์ ๋น์ฉํจ์(Cost function)๊ฐ ๋๋ค.
๋จธ์ ๋ฌ๋์์๋ ์ด๋ ๊ฒ ๋น์ฉํจ์๋ฅผ ์ต์ํํ๋ ๋ชจ๋ธ์ ์ฐพ๋ ๊ณผ์ ์ 'ํ์ต'์ด๋ผ๊ณ ํ๋ค.
์ฌ๊ธฐ์ ๊ณ์ α์ β๋ RSS๋ฅผ ์ต์ํํ๋ ๊ฐ์ผ๋ก ๋ชจ๋ธ ํ์ต์ ํตํ์ฌ ์ป์ด์ง๋ ๊ฐ์ด๋ค.
์ฆ RSS๋ฅผ ์ต์ํ ์ํฌ ์ ์๋ α์ β ๊ฐ์ ์ฐพ์์ผ ํ๋ค.
์ด๋ ๊ฒ ์์ฐจ์ ๊ณฑํฉ(RSS)์ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ ์ต์์ ๊ณฑํ๊ท ํน์ Ordinary Least Squares(OLS) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ ํํ๊ท๋ ์ฃผ์ด์ ธ ์์ง ์์ ๊ฐ์ ํจ์๊ฐ(๊ฒฐ๊ณผ๊ฐ)์ ๋ด์ฝ(๋ณด๊ฐ, interpolate)ํ์ฌ ์์ธกํ๋๋ฐ ๋์์ ์ค๋ค.
๋ฐ๋ผ์ ๋ฐ์ดํฐ์ ์ค๊ฐ์ค๊ฐ ๋น์ด์ ์กด์ฌํ์ง ์๋ ๊ฐ์ ๋ํด์๋ ์ ํํ๊ท๋ชจ๋ธ์ ์ฌ์ฉํด ์ด๋ฆผ์ก์ ์์ธกํด ๋ณผ ์ ์๋ค.
๋ํ ์ ํํ๊ท๋ชจ๋ธ์ ๊ธฐ์กด ๋ฐ์ดํฐ์ ๋ฒ์๋ฅผ ๋์ด์๋ ๊ฐ์ ์์ธกํ๊ธฐ ์ํ ์ธ์ฝ(extrapolate)๋ ์ ๊ณตํด์ค๋ค.
๐ก Simple Linear Regression (๋จ์ ์ ํ ํ๊ท) ์์
# ์ฃผํ์ ๊ฐ๊ฒฉ์ ์์ธกํ๋ ๋ชจ๋ธ ์์ฑ (์ฃผํ ์ ๋ณด ๋ฐ์ดํฐ์
= df)
from sklearn.linear_model import LinearRegression
model = LinearRegression()
feature = ['GrLivArea']
target = ['SalePrice']
X_train = df[feature]
y_train = df[target]
# ๋ชจ๋ธ ํ์ต
model.fit(X_train, y_train)
# ์๋ก์ด ๋ฐ์ดํฐ ์ํ์ ์ ํํด ํ์ตํ ๋ชจ๋ธ์ ํตํด ์์ธก
X_test = [[4000]]
y_pred = model.predict(X_test)
print(f'{X_test[0][0]} sqft GrLivArea๋ฅผ ๊ฐ์ง๋ ์ฃผํ์ ์์ ๊ฐ๊ฒฉ์ ${int(y_pred)} ์
๋๋ค.')
Output : 4000 sqft GrLivArea๋ฅผ ๊ฐ์ง๋ ์ฃผํ์ ์์ ๊ฐ๊ฒฉ์ $447090 ์ ๋๋ค.
# ์ ์ฒด ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ํ์ต์ํจ ๋ชจ๋ธ์ ํตํด ์์ธก (์ฃผํ ์ ๋ณด ํ
์คํธ ๋ฐ์ดํฐ์
= df_t)
X_test = [[x] for x in df_t['GrLivArea']
y_pred = model.predict(X_test)
์ ํํ๊ท๋ชจ๋ธ์ ๊ณ์(Coefficients)
Coefficient (ํ๊ท๊ณ์) : ํ๊ท์ง์ ์ ๊ธฐ์ธ๊ธฐ (α)
Intercept (์ ํธ) : ํ๊ท์ง์ ์ y ์ ํธ (β)
sklearn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ LinearRegression ๊ฐ์ฒด์ coef_, intercept_ ์์ฑ์ ํตํด์ ๊ฐ์ ๊ตฌํ ์ ์๋ค.
model.coef_ # array([[107.13035897]])
model.intercept_ # array([18569.02585649])
cf.
LinearRegression ๋ชจ๋ → ์ต์์์น๋ฒ (OLS) ์ฌ์ฉ
SGD Regressor ๋ชจ๋ → ๊ฒฝ์ฌํ๊ฐ๋ฒ ์ฌ์ฉ
'Boot Camp > section2' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AIB] Logistic Regression (0) | 2022.03.30 |
---|---|
[AIB] One Hot Encoding, Feature Selection, Ridge Regression (0) | 2022.03.30 |
[AIB] Bias, Variance, R-Square, Multiple Regression, Evaluation Metrics (0) | 2022.03.25 |