์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ๋ฐ์ดํฐ๋ถ์์ ๋ฌธ๊ฐ
- PCA
- ๋ ๋ฆฝํ๋ณธ
- ์ธ๋์ํ๋ง
- t-test
- ๋ฐ์ดํฐ๋ถ์
- numpy
- ๊ตฐ์งํ
- pandas
- ํฌ๋กค๋ง
- ํ์ด์ฌ
- ์ฃผ์ฑ๋ถ๋ถ์
- Lambda
- datascience
- ํ ์คํธ๋ถ์
- ADP
- dataframe
- Python
- opencv
- LDA
- ADsP
- ์๋ํด๋ผ์ฐ๋
- DBSCAN
- iloc
- ์ค๋ฒ์ํ๋ง
- ๋ฐ์ดํฐ๋ถ๊ท ํ
- ๋์ํ๋ณธ
- ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ
- ๋ฐ์ดํฐ๋ถ์์ค์ ๋ฌธ๊ฐ
- ๋น ๋ฐ์ดํฐ
Data Science LAB
[Python] ์ ํ ํ๊ท๋ถ์ ๋ณธ๋ฌธ
ํ๋ ํน์ ๊ทธ ์ด์์ ์์ธ์ด ์ข ์๋ณ์์ ๋ฏธ์น๋ ์ํฅ์ ์ถ์ ํ์ฌ ์์ผ๋ก ํํํ๋ ํต๊ณ๊ธฐ๋ฒ์ผ๋ก ๋จธ์ ๋ฌ๋๊ณผ ๋ค๋ฅด๊ฒ ์์ผ๋ก ํํํ๊ธฐ ๋๋ฌธ์ ํด์๋ ฅ์ ๋์ผ ์ ์๋ค.
์ ํ ํ๊ท๋ถ์์ ํ๊ฐ
SST : ์ด๋ณ๋
SSE : ์ค๋ช ๋ ๋ณ๋
SSR : ์ค๋ช ๋์ง ์์ ๋ณ๋์ ์๋ฏธ
์์ ์์์ด ์๋ฏธํ๋ ๋ฐ๋ ์ด ๋ณ๋ ์ค ์ค๋ช ๋ ๋ณ๋์ ๋น์จ์ด๋ค.
์ฆ, ํ๊ท ์ถ์ ์ ์ด ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ผ๋ง๋ ์ค๋ช ํ๊ณ ์๋์ง๋ฅผ ์๋ฏธํ๋ฉฐ ์ด ๊ฐ์ด ๋๋ค๋ฉด ํ๊ท ์ถ์ ์ง์ ์ผ๋ก ์๋ก์ด ๊ฐ์ ์์ธกํ๊ฑฐ๋ ์ถ์ ํ๋๋ผ๋ ๋ฏฟ์ ์ ์๋ ์ ๋๋ฅผ ์๋ฏธํ๋ค.
RMSE ๊ฐ์ ํ๊ท ์ ๊ณฑ๊ทผ ์ค์ฐจ๋ก ์์ธก๊ฐ์์ ์ค์ ๊ด์ธก๊ฐ์ ๋บ ๊ฐ์ ์ ๊ณฑ์ ํฉ์ ํ๋ณธ์ ์๋ก ๋๋ ๊ฒ์ด๋ค. SSE๊ฐ์ ์์ ๋ (n-2)๋ก ๋๋๊ณ ๋ฃจํธ๋ฅผ ์ทจํ ๊ฐ๊ณผ ๊ฐ๋ค. RMSE ๊ฐ์ด ๋ฎ์ ์๋ก ์์ธก๋ ฅ์ด ์ข๋ค๊ณ ํ ์ ์๋ค.
statsmodels.formula.api.ols(formula, data, subset=None, drop_cols=None, *arg, **kwargs)
models.summary() | ๋ชจ๋ธ ์ ํฉ ๊ฒฐ๊ณผ ์์ฝ ์ ์ |
models.params | ๋ณ์์ ํ๊ท๊ณ์ |
model.predict() | ์๋ก์ด ๋ฐ์ดํฐ์ ๋ํ ์์ธก๊ฐ |
import pandas as pd
import numpy as np
house = pd.read_csv('../data/kc_house_data.csv')
house = house[['price', 'sqft_living']]
# ๋
๋ฆฝ๋ณ์์ ์ข
์๋ณ์์ ์ ํ ๊ฐ์
house.corr()
๋ ๋ฆฝ๋ณ์์ ์ข ์๋ณ์์ ์๊ด๊ณ์๊ฐ 0.7๋ก ์์ ์๊ด๊ด๊ณ๊ฐ ์์์ ํ์ธ
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt
y = house['price']
X = house['sqft_living']
#๋จ์ ์ ํ ํ๊ท ๋ชจํ ์ ํฉ
lr = ols('price ~ sqft_living', data=house).fit()
y_pred = lr.predict(X)
plt.scatter(X,y)
plt.plot(X, y_pred, color='red')
plt.xlabel('sqft_living', fontsize=10)
plt.ylabel('price', fontsize=10)
plt.title('Linear Regression Result')
plt.show()
๋จ์ ์ ํ ํ๊ท๋ถ์์ผ๋ก๋ ์ค๋ช ์ด ๋ถ๊ฐ๋ฅํ ํํ์
lr.summary()
๋ค์ค ์ ํ ํ๊ท๋ถ์
- ๋ ๋ฆฝ๋ณ์์ ์๊ฐ ๋ ๊ฐ ์ด์์ด๋ฉด ํ์์ ์ผ๋ก ๋ค์ค๊ณต์ ์ฑ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํจ
- ๋ ๋ฆฝ๋ณ์๋ค ๊ฐ์ ์๊ด๊ณ์๋ฅผ ๊ตฌํด ์๊ด์ฑ์ ์ง์ ํ์ ํ๊ณ ์๊ด์ฑ์ด 0.9 ์ด์์ด๋ฉด ๋ค์ค๊ณต์ ์ฑ์ด ์๋ค๊ณ ํ๋จ
- ๋ค์ค๊ณต์ ์ฑ์ด ์์ฌ๋๋ ๋ ๋ ๋ฆฝ๋ณ์์ ํ๊ท๋ถ์์ผ๋ก ํ์ฉ ์ค์ฐจ๋ฅผ ๊ตฌํ์ ๋ 0.1 ์ดํ์ด๋ฉด ๋ค์ค๊ณต์ ์ฑ ๋ฌธ์ ๊ฐ ์ฌ๊ฐํ๋ค๊ณ ํ ์ ์์
- VIF๊ฐ 10 ์ด์์ด๋ฉด ๋ค์ค๊ณต์ ์ฑ์ด ์กด์ฌํจ
import pandas as pd
cars = pd.read_csv('../data/Cars93.csv')
cars.info()
import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
#์ปฌ๋ผ์ ํน์ ๋ฌธ์ ์ ๊ฑฐ
cars.columns = cars.columns.str.replace('.', "")
model = smf.ols(formula='Price ~ EngineSize + RPM + Weight + Length + MPGcity + MPGhighway', data=cars)
result = model.fit()
result.summary()
cars[['EngineSize', 'RPM', 'Weight', 'Length', 'MPGcity', 'MPGhighway']].corr()
from patsy import dmatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor
y, X = dmatrices('Price ~ EngineSize + RPM + Weight + Length + MPGcity + MPGhighway',
data = cars, return_type ='dataframe')
# ๋
๋ฆฝ๋ณ์๋ผ๋ฆฌ์ VIF๊ฐ์ ๊ณ์ฐํ์ฌ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ๋ง๋ฆ
vif_list = []
for i in range(1, len(X.columns)):
vif_list.append([variance_inflation_factor(X.values, i), X.columns[i]])
pd.DataFrame(vif_list, columns=['vif', 'variable'])
model = smf.ols(formula = 'Price ~ EngineSize + RPM + Weight + MPGhighway', data = cars)
result = model.fit()
result.summary()
from concurrent.futures import process
import time
import itertools
def processSubset(X,y, feature_set):
model = sm.OLS(y, X[list(feature_set)])
regr = model.fit()
AIC = regr.aic
return {'model':regr, 'AIC':AIC}
#์ ์ง ์ ํ๋ฒ
def forward(X,y,predictors):
# ๋ณ์๋ค์ด ๋ฏธ๋ฆฌ ์ ์๋ predictors์ ์๋ ์ง ์๋ ์ง ํ์ธ
remaining_predictors = [p for p in X.columns.difference(['Intercept']) if p not in predictors]
results = []
for p in remaining_predictors:
results.append(processSubset(X=X, y=y, feature_set=predictors+[p]+['Intercept'] ))
#๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
models = pd.DataFrame(results)
#AIC๊ฐ ๊ฐ์ฅ ๋ฎ์ ๊ฒ์ ์ ํ
best_model = models.loc[models['AIC'].argmin()] # index
print('Processed ', models.shape[0], 'models on',len(predictors)+1, 'predictors in')
print('Selected predictors : ', best_model['model'].model.exog_names,
'AIC : ', best_model[0])
return best_model
#ํ์ง ์๊ฑฐ๋ฒ
def backward(X,y,predictors):
tic = time.time()
results = []
for combo in itertools.combinations(predictors, len(predictors) -1):
results.append(processSubset(X=X, y=y, feature_set=list(combo) + ['Intercept']))
models = pd.DataFrame(results)
#๊ฐ์ฅ ๋ฎ์ AIC๋ฅผ ๊ฐ์ง ๋ชจ๋ธ์ ์ ํ
best_model = models.loc[models['AIC'].argmin()]
toc = time.time()
print('Processed ', models.shape[0],
'models on', len(predictors)-1,
'predictors in', (toc-tic))
print('Selected predicors : ', best_model['model'].model.exog_names,
'AIC :',best_model[0])
return best_model
#๋จ๊ณ์ ์ ํ๋ฒ
def Stepwise_model(X,y):
Stepmodels = pd.DataFrame(columns = ['AIC','model'])
tic = time.time()
predictors = []
Smodel_before = processSubset(X,y,predictors+['Intercept'])['AIC']
for i in range(1, len(X.columns.difference(['Intercept'])) +1):
Forward_result = forward(X=X, y=y, predictors=predictors)
print('forward')
Stepmodels.loc[i] = Forward_result
predictors = Stepmodels.loc[i]['model'].model.exog_names
predictors = [k for k in predictors if k!='Intercept']
Backward_result = backward(X=X, y=y, predictors=predictors)
if Backward_result['AIC'] < Forward_result['AIC']:
Stepmodels.loc[i] = Backward_result
predictors = Stepmodels.loc[i]['model'].model.exog_names
Smodel_before = Stepmodels.loc[i]['AIC']
predictors = [k for k in predictors if k!='Intercept']
print('backward')
if Stepmodels.loc[i]['AIC'] > Smodel_before:
break
else:
Smodel_before = Stepmodels.loc[i]['AIC']
toc = time.time()
print('Total elapsed time : ',(toc-tic), 'Seconds.')
return (Stepmodels['model'][len(Stepmodels['model'])])
Stepwise_best_model = Stepwise_model(X=X, y=y)
Stepwise_best_model.summary()
ํ์ด์ฌ์ด ํธํ๊ธด ํ์ง๋ง ๋ณ์์ ํ๋ฒ ๋งํผ์ ์ฝ๋ ๊ตฌํํ๋๊ฒ ๋๋ฌด ๋ณต์กํด์ ๋ง์ฝ ADP ์ํ์ ๋์จ๋ค๋ฉด,,, R๋ก ํ ๊ฒ๊ฐ๋ค

'๐ Machine Learning > ๊ธฐ์ด ํต๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ์์ ์์ธ๋ถ์ (FA) (0) | 2022.09.19 |
---|---|
[Python] ๋คํญ ํ๊ท๋ถ์ (Polynomial Regression) (0) | 2022.08.24 |
[Python] ๊ต์ฐจ ๋ถ์ (์นด์ด์ ๊ณฑ ๊ฒ์ ) (0) | 2022.08.21 |
[Python] ์ด์ ๋ฐฐ์น ๋ถ์ฐ ๋ถ์ (Two-way ANOVA) (0) | 2022.08.20 |
[Python] ์ผ์ ๋ถ์ฐ ๋ถ์(ANOVA) (0) | 2022.03.16 |