728x90
반응형
출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=21488029
*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.
상세 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.
선형회귀모델
- 연속형 원인변수가 연속형 결과변수에 영향을 미치는지를 분석하여 레이블 변수를 예측하는 모델
- 회귀모델은 실제값과 예측간 값의 일치정도 및 차이정도를 계산하여 모델 성능 지표로 삼는다.
- 이에 대하여 SSE, AE, MSE, MAE, RMSE, MAPE 등 여러 오차지표를 사용하며, RMSE가 대표적으로 사용된다.
- sklearn.linear_model 내에 있는 LinearRegression을 불러와 사용할 수 있다.
- 일반적인 회귀분석에서 x데이터를 정규화 하지 않으므로, 정규화에 앞서statsmodels.api를 가져와 상수항 변수를 더하고 설명력을 확인한다.
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
data = pd.read_csv('/house_price.csv', encoding='utf-8')
data.dropna(inplace=True)
x = data[data.columns[0:5]]
y = data[["house_value"]]
train_x, test_x, train_y, test_y = train_test_split(x, y, random_state=42)
import statsmodels.api as sm
train_x = sm.add_constant(train_x)
test_x = sm.add_constant(test_x)
multi_model_train = sm.OLS(train_y, train_x).fit()
print(multi_model_train.summary())
print('\n\n======================================================\n\n')
multi_model_test = sm.OLS(test_y, test_x).fit()
print(multi_model_test.summary())
- coef를 확인하여 기울기를 확인한다. 예를들어 훈련 데이터에서 income이 1 증가할 때 house_value는 5.975e+04 만큼 증가하게 된다.
- 일반적으로 coef는 0.05보다 작으면 유의한 영향을 미치는 변수로 본다.
- 확인을 마쳤다면 sklearn.linear_model의 LinearRegression을 불러와 학습을 진행한다.
- 그 후 여러 오차 확인 방법으로 오차를 확인한다.
model = LinearRegression()
model.fit(train_x, train_y)
pred_y_train = model.predict(train_x)
pred_y_test = model.predict(test_x)
# RMSE
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(train_y, pred_y_train)
MSE_test = mean_squared_error(test_y, pred_y_test)
print("RMSE (Train):\t", np.sqrt(MSE_train))
print("RMSE (Test):\t", np.sqrt(MSE_test))
# MAE
from sklearn.metrics import mean_absolute_error
MAE_train = mean_absolute_error(train_y, pred_y_train)
MAE_test = mean_absolute_error(test_y, pred_y_test)
print("MAE (Train):\t", MAE_train)
print("MAE (Test):\t", MAE_test)
# MAPE
def MAPE(y_test, y_pred) :
return np.mean(np.abs((y_test-y_pred) / y_test)) * 100
print("MAPE (Train):\t", MAPE(train_y, pred_y_train))
print("MAPE (Test):\t", MAPE(test_y, pred_y_test))
릿지 회귀모델
- 릿지 회귀모델이란 선형회귀분석의 기본원리는 따르나 가중치 값을 최대한 작게 만들어 (0에 가깝게) 모든 독립변수(특성)가 종속변수(레이블)에 미치는 영향을 최소화하는 제약을 반영한 회귀모델이다.
- 각 특성의 영향을 최소화하여 훈련데이터에 과대적합되지 않도록 제약한 모델이라고 할 수 있다.
- 선형관계 뿐 아니라 다항곡선 추정도 가능하다.
- sklearn.linear_model 내에 있는 Ridge 라이브러리를 사용한다.
- 주요 하이퍼파라미터는 alpha로, 디폴트는 1이며 클수록 규제가 강하여 회귀계수가 0에 근접해진다. 반면 0에 가까울수록 규제를 하지 않아 선형회귀와 유사한 결과를 보인다.
import pandas as pd
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
import statsmodels.api as sm
data = pd.read_csv('/house_price.csv', encoding='utf-8')
data.dropna(inplace=True)
x = data[data.columns[0:5]]
y = data[["house_value"]]
train_x, test_x, train_y, test_y = train_test_split(x, y, random_state=42)
train_x = sm.add_constant(train_x)
test_x = sm.add_constant(test_x)
params = {'alpha' : [1e-4, 1e-3, 1e-2, 0.1, 1, 0.5, 1, 5.0, 10.0]}
gSearch = GridSearchCV(Ridge(), params, cv=5)
gSearch.fit(train_x, train_y)
best_alpha = gSearch.best_params_['alpha']
model = Ridge(alpha=best_alpha)
model.fit(train_x, train_y)
pred_y_train = model.predict(train_x)
pred_y_test = model.predict(test_x)
# RMSE
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(train_y, pred_y_train)
MSE_test = mean_squared_error(test_y, pred_y_test)
print("RMSE (Train):\t", np.sqrt(MSE_train))
print("RMSE (Test):\t", np.sqrt(MSE_test))
# MAE
from sklearn.metrics import mean_absolute_error
MAE_train = mean_absolute_error(train_y, pred_y_train)
MAE_test = mean_absolute_error(test_y, pred_y_test)
print("MAE (Train):\t", MAE_train)
print("MAE (Test):\t", MAE_test)
# MAPE
def MAPE(y_test, y_pred) :
return np.mean(np.abs((y_test-y_pred) / y_test)) * 100
print("MAPE (Train):\t", MAPE(train_y, pred_y_train))
print("MAPE (Test):\t", MAPE(test_y, pred_y_test))
라쏘 회귀모델
- 릿지회귀모델과 유사하게 특성의 계수값을 0에 가깝게 하지만 실제 중요하지 않은 변수의 계수를 0으로 만들어 불필요한 변수를 제거하는 모델이다.
- sklearn.linear_model 내의 Lasso 라이브러리를 사용하여 구현한다.
- 주요 하이퍼파라미터는 Ridge와 마찬가지로 alpha이며, 디폴트는 0이다.
- alpha가 커질수록 정확도는 낮아지지만 일반화되며, 0에 가까워질수록 선형회귀와 유사해진다.
import pandas as pd
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
import statsmodels.api as sm
data = pd.read_csv('/house_price.csv', encoding='utf-8')
data.dropna(inplace=True)
x = data[data.columns[0:5]]
y = data[["house_value"]]
train_x, test_x, train_y, test_y = train_test_split(x, y, random_state=42)
train_x = sm.add_constant(train_x)
test_x = sm.add_constant(test_x)
params = {'alpha' : [1e-4, 1e-3, 1e-2, 0.1, 1, 0.5, 1, 5.0, 10.0]}
gSearch = GridSearchCV(Lasso(), params, cv=5)
gSearch.fit(train_x, train_y)
best_alpha = gSearch.best_params_['alpha']
model = Lasso(alpha=best_alpha)
model.fit(train_x, train_y)
pred_y_train = model.predict(train_x)
pred_y_test = model.predict(test_x)
# RMSE
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(train_y, pred_y_train)
MSE_test = mean_squared_error(test_y, pred_y_test)
print("RMSE (Train):\t", np.sqrt(MSE_train))
print("RMSE (Test):\t", np.sqrt(MSE_test))
# MAE
from sklearn.metrics import mean_absolute_error
MAE_train = mean_absolute_error(train_y, pred_y_train)
MAE_test = mean_absolute_error(test_y, pred_y_test)
print("MAE (Train):\t", MAE_train)
print("MAE (Test):\t", MAE_test)
엘라스틱 넷
- 엘라스틱넷은 릿지회귀와 라쏘회귀를 절충한 모델이다.
- 릿지와 라쏘의 규제항을 단순히 더하여 사용하는데, 이 때 혼합비율 r을 사용해 조절한다.
- r이 0이면 릿지회귀와 같고, r이 1이면 라쏘회귀와 같아진다.
- sklearn.linear_model 내의 ElasticNet 라이브러리를 사용하여 구현한다.
- 하이퍼 파라미터는 마찬가지로 alpha이며, 0에 가까워질수록 제약이 없어 선형회귀와 유사해진다.
from sklearn.linear_model import ElasticNet
params = {'alpha' : [1e-4, 1e-3, 1e-2, 0.1, 1, 0.5, 1, 5.0, 10.0]}
gSearch = GridSearchCV(ElasticNet(), params, cv=5)
gSearch.fit(train_x, train_y)
best_alpha = gSearch.best_params_['alpha']
model = ElasticNet(alpha=best_alpha)
model.fit(train_x, train_y)
pred_y_train = model.predict(train_x)
pred_y_test = model.predict(test_x)
# RMSE
import numpy as np
from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(train_y, pred_y_train)
MSE_test = mean_squared_error(test_y, pred_y_test)
print("RMSE (Train):\t", np.sqrt(MSE_train))
print("RMSE (Test):\t", np.sqrt(MSE_test))
# MAE
from sklearn.metrics import mean_absolute_error
MAE_train = mean_absolute_error(train_y, pred_y_train)
MAE_test = mean_absolute_error(test_y, pred_y_test)
print("MAE (Train):\t", MAE_train)
print("MAE (Test):\t", MAE_test)
728x90
반응형
'자격증 > 빅데이터 분석기사 (실기)' 카테고리의 다른 글
04. 머신러닝 핵심 알고리즘 (4) (0) | 2022.06.08 |
---|---|
04. 머신러닝 핵심 알고리즘 (2) (0) | 2022.06.06 |
04. 머신러닝 핵심 알고리즘 (1) (0) | 2022.06.05 |
03_03. 머신러닝 프로세스 (0) | 2022.06.04 |
03_02. 회귀 (0) | 2022.06.04 |