Q . Train과 Test 데이터를 분리하는 이유는?
A . Train 데이터로 훈련한 모델이 예측 성능을 제대로 평가할 수 있는지 Test 데이터로 확인하는 작업이 필요하다. Test 데이터는 훈련을 마친 모델에 1번만 수행해 최종적으로 확인하는 용도로 사용한다.
- 일반적으로, 무작위로 분리
- 시계열 데이터인 경우, 테스트 데이터는 "미래"이어야 한다
# sample 메소드 사용하여 분리
train = df.sample(frac=0.75,random_state=1)
test = df.drop(train.index)
다중선형회귀모델
- 독립변수 2개
- 기준모델 : 평균
- 모델해석 : 회귀계수
Q . 선형회귀의 장점은?
- 장점 : 선형회귀는 다른 ML 모델에 비해 상대적으로 학습이 빠르고 설명력이 강하다.
- 단점 : 선형 모델이므로 과소적합(underfitting)이 잘 일어난다.
from sklearn.linear_model import LinearRegression
model = LinearRegression()
features = ['GrLivArea',
'OverallQual']
X_train = train[features]
X_test = test[features]
# 모델 fit
model.fit(X_train, y_train)
y_pred = model.predict(X_train)
mae = mean_absolute_error(y_train, y_pred)
print(f'훈련 에러: {mae:.2f}')
# 훈련 에러: 29129.58
# 테스트 데이터에 적용
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f'테스트 에러: {mae:.2f}')
# 테스트 에러: 27598.31
# 시각화
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import style
style.use('seaborn-talk')
fig = plt.figure()
# for 3d plot
ax = fig.gca(projection='3d')
ax.scatter(train['GrLivArea'], train['OverallQual'], train['SalePrice'])
ax.set_xlabel('GrLivArea', labelpad=12)
ax.set_ylabel('OverallQual', labelpad=10)
ax.set_zlabel('SalePrice', labelpad=20)
plt.suptitle('Housing Prices', fontsize=15)
plt.show()
# plotly로 시각화 할 경우
px.scatter_3d(
train,
x='GrLivArea',
y='OverallQual',
z='SalePrice',
title='House Prices'
)
단순선형회귀식 :
다중선형회귀식 :
절편( intercept ), 계수들( coefficients ) : model.intercept_, model.coef_
b0 = model.intercept_
b1, b2 = model.coef_
MSE (Mean Squared Error) =
MAE (Mean absolute error) =
RMSE (Root Mean Squared Error) =
R2, R-squared (Coefficient of determination) =
참고
Error
, 관측치와 예측치 차이): Regression
, 예측치와 평균 차이): Total
, 관측치와 평균 차이): , SSE + SSR# 회귀방정식 평가지표
mse = mean_squared_error(y, y_pred)
mae = mean_absolute_error(y, y_pred)
rmse = mse ** 0.5
r2 = r2_score(y, y_pred)
Q . 모델 선정에서 일반화( generalization )란?
A . 훈련 데이터뿐만 아니라 테스트 데이터에서 좋은 성능을 내는 모델을 일반화가 잘 되었다고 말한다.
Q . 과적합이란?
A . 모델이 훈련데이터에만 과하게 적합하여 테스트데이터에서 오차가 크게 나타나 일반화를 못하는 현상을 말한다.
- 분산이 높다 = 과적합, 모델이 학습 데이터의 노이즈에 민감하게 적합하여 일반화가 안된 경우
Q . 과소적합이란?
A . 모델이 훈련데이터뿐만 아니라 테스트데이터에서 오차가 크게 나타나 일반화를 못하는 현상을 말한다. 훈련데이터에서도 과적합이 아닌 현상이다.
- 편향이 높다 = 과소적합, 모델이 학습 데이터에서 feature와 target 변수의 관계를 파악하지 못한 경우
Q . 디즈니플러스에서 시철률 추세를 예측하는 회귀모델을 만들었습니다. 모델이 RMSE가 너무 높은 반면 95% 시간대에서 예측오차는 1% 밖에 되지 않습니다. 예측오차를 보면 좋은 모델인데 RMSE가 너무 높은 이유는 뭘까요? 또, 문제를 어떻게 해결해야 할까요?
A .