์ ํํ๊ท
๋ชฉ์
- ์ ํํ๊ท๋ชจ๋ธ ์ดํด
- ์ง๋ํ์ต(Supervised Learning) ์ดํด
- ํ๊ท๋ชจ๋ธ์ ๋ํ ๊ธฐ์ค๋ชจ๋ธ์ ์ค์
- Scikit-learn์ ์ด์ฉํ ์ ํ ํ๊ท ๋ชจ๋ธ
์ฃผํ ํ๋งค ๊ฐ๊ฒฉ ์์ธก
import pandas as pd
# ์ฃผ์ด์ง url ์ฃผ์๋ฅผ ์ด์ฉํด house prices ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
df = pd.read_csv('https://ds-lecture-data.s3.ap-northeast-2.amazonaws.com/house-prices/house_prices_train.csv')
df_t = pd.read_csv('https://ds-lecture-data.s3.ap-northeast-2.amazonaws.com/house-prices/house_prices_test.csv')
df๋ train set์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์์ธกํ๊ณ ์ ํ๋ ๊ฐ(๋ผ๋ฒจ, ์ ๋ต, ์์ธก๊ฐ)์ด ์ฃผ์ด์ ธ์๋ค.(์์์์ 'SalePrice')
df_t๋ test set์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์์ธกํ๊ณ ์ ํ๋ ๊ฐ์ ์ฃผ์ด์ ธ์์ง ์๋ค.
์ถ๊ฐ, ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํ
์ด๋ธ ํํ์ ๋ฐ์ดํฐ๋ฅผ 'tabular data'๋ผ๊ณ ํฉ๋๋ค.
์ฃผํ ํ๋งค ๊ฐ๊ฒฉ์ ์์ธกํ๋ ค๊ณ ํ ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ธฐ์กด ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์์ธก
- ์ฐ๋ฆฌ๊ฐ ํํ ํ๋ ์ด๋ฆผ์ง์. ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ผ ์๋ ์์ง๋ง ํธ๊ฒฌ์ด ์กด์ฌํ๋ฉฐ ์ค๋ฅ์ ๋น ์ง ์ํ์ด ๋์ต๋๋ค.
- ํต๊ณ ์ ๋ณด๋ฅผ ํ์ฉ
- min, max, mean, median, describe
- ํ๋ฅ ๋ฐ๋ํจ์์ ํ๊ท , ์ค์๊ฐ์ ๊ฐ์ด ๋น๊ต
import matplotlib.pyplot as plt
import seaborn as sns
## SalePrice์ ํ๋ฅ ๋ฐ๋ํจ์๋ฅผ ๊ทธ๋ ค๋ณด๊ฒ ์ต๋๋ค
sns.displot(df['SalePrice'], kde=True)
## ํ๊ท ๊ณผ, ์ค๊ฐ๊ฐ์ผ๋ก ์์ง์ ์ ๊ทธ๋ ค๋ณด๊ฒ ์ต๋๋ค.
plt.axvline(df['SalePrice'].mean(), color='blue')
plt.axvline(df['SalePrice'].median(), color='red'); #
๊ธฐ์ค๋ชจ๋ธ(Baseline Model)
์์ธก ๋ชจ๋ธ์ ๊ตฌ์ฒด์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ ์ ๊ฐ์ฅ ๊ฐ๋จํ๋ฉด์๋, ์ง๊ด์ ์ด๊ณ ์ต์ํ์ ์ฑ๋ฅ์ ๋ํ๋ด๋ ๋ชจ๋ธ
- ๋ถ๋ฅ : ํ๊ฒ์ ์ต๋น ํด๋์ค
- ํ๊ท : ํ๊ฒ์ ํ๊ท ๊ฐ
- ์๊ณ์ดํ๊ท : ์ด์ ํ์์คํฌํ์ ๊ฐ
์๋๋ ํ๊ท ์ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(ํ๊ท ๊ธฐ์ค๋ชจ๋ธ)
predict = df['SalePrice'].mean()
errors = predict - df['SalePrice']
mean_absolute_error = errors.abs().mean() # MAE(ํ๊ท ์ ๋์ค์ฐจ) error์ ์ ๋๊ฐ ํ๊ท
x = df['GrLivArea']
y = df['SalePrice']
sns.lineplot(x=x, y=predict, color='red')
sns.scatterplot(x=x, y=y, color='blue');
๋จ, ์ด๋ฐ ๊ธฐ์ค ๋ชจ๋ธ์ ์๋ฌ๊ฐ ์๋นํ ํฌ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์
- Pairplot ์์
sns.set(style='whitegrid', context='notebook')
cols = ['GrLivArea', 'LotArea','SalePrice']
sns.pairplot(df[cols], height=2);
- ์์ธก๋ชจ๋ธ(Predictive Model) ํ์ฉ
- scatterplot์ ๊ฐ์ฅ ์ ๋ง๋ ์ง์ ์ ๊ทธ๋ ค์ฃผ๋ฉด ๊ทธ๊ฒ์ด ํ๊ท ์์ธก๋ชจ๋ธ
ํ๊ท๋ถ์์์ ์ค์ํ ๊ฐ๋ : '์์ธก๊ฐ'๊ณผ '์์ฐจ(residual)'
-> ์์ธก๊ฐ : ๋ชจ๋ธ์ด ์ถ์ ํ๋ ๊ฐ, ์์ฐจ : ์์ธก๊ฐ๊ณผ ๊ด์ธก๊ฐ ์ฐจ์ด cf)์ค์ฐจ(error)๋ ๋ชจ์ง๋จ์์์ ์์ธก๊ฐ๊ณผ ๊ด์ธก๊ฐ ์ฐจ์ด
ํ๊ท์ ์ ์์ฐจ ์ ๊ณฑ๋ค์ ํฉ์ธ 'RSS(Residual Sum of Squares); SSE(Sum of Square Error)๋ผ๊ณ ๋ ํจ'๋ฅผ ์ต์ํํ๋ ์ง์ .
์ด ๊ฐ์ด ํ๊ท๋ชจ๋ธ์ ๋น์ฉํจ์(Cost Function) ์ฆ, ๋จธ์ ๋ฌ๋์์์ ํ์ต์ ๋น์ฉํจ์๋ฅผ ์ต์ํํ๋ ๋ชจ๋ธ์ ์ฐพ๋ ๊ณผ์
$${\displaystyle \operatorname {RSS} =\sum _{i=1}^{n}(\varepsilon _{i})^{2}=\sum _{i=1}^{n}(y_{i}-f(x_{i}))^{2}=\sum _{i=1}^{n}(y_{i}-(\alpha x_{i} + \beta))^{2}}$$
์ฌ๊ธฐ์ ๊ณ์ α์ β๋ RSS๋ฅผ ์ต์ํ ํ๋ ๊ฐ์ผ๋ก ๋ชจ๋ธ ํ์ต์ ํตํด์ ์ป์ด์ง๋ ๊ฐ
์ด๋ ๊ฒ ์์ฐจ์ ๊ณฑํฉ์ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ ์ต์์ ๊ณฑํ๊ท(Ordinary Least Squares ; OLS)๋ผ๊ณ ํ๋ค.
$$\beta =\displaystyle {\bar {y}}-\alpha{\bar {x}}$$
$$\alpha ={\frac {S_{xy}}{S_{xx}}}$$
$${\displaystyle \operatorname {RSS} =\sum _{i=1}^{n}(\varepsilon _{i})^{2}=\sum _{i=1}^{n}(y_{i}-f(x_{i}))^{2}=\sum _{i=1}^{n}(y_{i}-(\alpha x_{i} + \beta))^{2}}$$
์์ ๊ฐ์ด, ์ต์์ ๊ณฑ๋ฒ์ผ๋ก ์ ํ ํ๊ท๊ณ์๋ฅผ ์ฝ๊ฒ ๊ตฌํ ์ ์๋ค.
- Seaborn regplot์ผ๋ก ๊ทธ๋ ค๋ณด๊ธฐ
sns.regplot(x=df['GrLivArea'], y=df['SalePrice']);
- ๋ณด๊ฐ(interpolate) : ์ฃผ์ด์ง ๊ฐ ๋ด์์ ๋น์ด์๋ ๋ ๋ฆฝ๋ณ์์ ๋ํ ์์ธก๊ฐ์ ๊ตฌํ๋ ๊ฒ
- ์ธ์ฝ(extrapolate) : ์ฃผ์ด์ง ๊ฐ์ ๋์ด์๋ ๋ ๋ฆฝ๋ณ์์ ๋ํ ์์ธก๊ฐ์ ๊ตฌํ๋ ๊ฒ
์ข ์๋ณ์ : ๋ฐ์๋ณ์(Response), ๋ ์ด๋ธ(Label ; ๋ผ๋ฒจ), ํ๊ฒ(Target) ๋ฑ์ผ๋ก ๋ถ๋ฆผ
๋ ๋ฆฝ๋ณ์ : ์์ธก๋ณ์(Predictor), ์ค๋ช (Explanatory), ํน์ฑ(Feature) ๋ฑ์ผ๋ก ๋ถ๋ฆผ
Scikit-learn(sklearn)์ ์ฌ์ฉํ ์ ํํ๊ท๋ชจ๋ธ
- scikit-learn : ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๋ง๋๋๋ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- scikit-learn์ ํ์ฉํด ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํด์๋ ์์ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉ
ํน์ฑ ๋ฐ์ดํฐ์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๋
ํน์ฑํ๋ ฌ์ ์ฃผ๋ก X(๋๋ฌธ์)๋ก ํํํ๊ณ ๋ณดํต 2์ฐจ์ ํ๋ ฌ, ์ฃผ๋ก Numpy ํ๋ ฌ์ด๋ Pandas DataFrame
ํ๊ฒ๋ฐฐ์ด์ ์ฃผ๋ก y(์๋ฌธ์)๋ก ํํํ๊ณ ๋ณดํต 1์ฐจ์ ํํ, ์ฃผ๋ก Numpy ๋ฐฐ์ด์ด๋ Pandas Series
- scikit-learn์๋ ์๋ง์ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ด ๊ตฌํ๋์ด ์์
- ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํ๊ธฐ์ ์ ํฉํ ๋ชจ๋ธ์ ์ ํ, ํด๋์ค๋ฅผ ์ฐพ์๋ณธ ํ ๊ด๋ จ ์์ฑ์ด๋ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ํ์ธ
- ๋ฌธ์ ์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ์์ง๋ง, ์์ ๋น์ทํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ค๋น
fit
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ต- 'predict()' method๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ธก
์ฐธ๊ณ
Basics of the API
๋จ์์ ํํ๊ท(Simple Linear Regression)
## Scikit-Learn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ ์์ธก๋ชจ๋ธ ํด๋์ค๋ฅผ Import ํฉ๋๋ค
from sklearn.linear_model import LinearRegression
## ์์ธก๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ๋ง๋ญ๋๋ค
model = LinearRegression()
## X ํน์ฑ๋ค์ ํ
์ด๋ธ๊ณผ, y ํ๊ฒ ๋ฒกํฐ๋ฅผ ๋ง๋ญ๋๋ค
feature = ['GrLivArea']
target = ['SalePrice']
X_train = df[feature] # X๋ ๋๋ฌธ์์ธ ์ด์ -> ํ๋ ฌํํ์ด๊ธฐ๋๋ฌธ
y_train = df[target] # y๋ ์๋ฌธ์์ธ ์ด์ -> ๋ฒกํฐํํ์ด๊ธฐ ๋๋ฌธ
## ๋ชจ๋ธ์ ํ์ต(fit)ํฉ๋๋ค
model.fit(X_train, y_train)
## ์ ์ฒด ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ์ ํตํด ์์ธกํด ๋ด
๋๋ค.
X_test = [[x] for x in df_t['GrLivArea']]
y_pred = model.predict(X_test)
## train ๋ฐ์ดํฐ์ ๋ํ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด๊ฒ ์ต๋๋ค.
plt.scatter(X_train, y_train, color='black', linewidth=1)
## test ๋ฐ์ดํฐ์ ๋ํ ์์ธก์ ํ๋์ ์ ์ผ๋ก ๋ํ๋ด ๋ณด๊ฒ ์ต๋๋ค.
plt.scatter(X_test, y_pred, color='blue', linewidth=1);
์๋์ ๊ฐ์ ์์
์ฐธ๊ณ
๋ค์ด์ด๊ทธ๋จ
์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ vs ๋จธ์ ๋ฌ๋
- ์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ : ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ ์ด๋ค ๋ฃฐ์ ๋ฐ๋ผ ์ ๋ต์ ๊ตฌํจ
- ๋จธ์ ๋ฌ๋ : ๋ฐ์ดํฐ์ ์ ๋ต์ ์ ๋ ฅํ๊ณ ๋ฃฐ์ ์ฐพ์๋
์ฐธ๊ณ
์ธ๊ณต์ง๋ฅ, ๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋
์ ํํ๊ท๋ชจ๋ธ ๊ณ์(Coefficients)
## ๊ณ์(coefficient)
model.coef_
## ์ ํธ(intercept)
model.intercept_
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]25.Ridge Regression(๋ฅํ ํ๊ท) (0) | 2021.12.21 |
---|---|
[TIL]24.๋ค์ค์ ํํ๊ท(Multiple Linear Regression) (0) | 2021.12.21 |
[TIL]22.Section Challenge ๋ฐ ๋ณต์ต (0) | 2021.12.17 |
[TIL]21.Session ๋ณต์ต (0) | 2021.12.16 |
[TIL]15.์ค์ฑ3 (0) | 2021.12.08 |