회귀분석
회귀분석이란 머신러닝이 예측해야하는 정답의 데이터 즉, 종속변수가 연속된 수치형인 경우를 의미한다. 회귀분석과 반대되는 개념으로는 분류분석이 있는데 이는 종속변수가 범주형인 경우이다. 회귀분석은 선형방정식을 활용한 머신러닝 클래스를 자주 사용한다.
Linear Regression
선형방정식은 y = x1 * w1 + x2 * w2 + ... xn * wn + b 형태의 방정식을 의미한다.
Linear Regression 클래스의 학습은 X 데이터를 구성하는 각 컬럼 별 최적화된 가중치와 절편의 값을 계산하는 과정을 수행한다.
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
# - 학습데이터 평가
score = model.score(X_train, y_train)
print(f'Train : {score}')
# - 테스트데이터 평가
score = model.score(X_test, y_test)
print(f'Test : {score}')
※ 회귀분석에서의 score 메소드 결과 = 결정계수
- 결정계수는 음의 값부터 1까지의 범위를 가지는 평가값
- 1 - (실제 정답과 모델이 예측한 값의 차이의 제곱값 합계) / 실제 정답과 실제 정답의 평균 값 차이의 제곱값 합계)
- 결정계수 값이 음수인 경우 : 모델이 평균 정도도 예측하지 못함을 의미 (학습 부족)
- 결정계수 값이 0인 경우 : 모델이 평균 정도로만 예측함을 의미 (학습 부족)
- 결정계수 값이 1인 경우 : 모델이 실제 정답과 완벽하게 동일하게 예측함을 의미 (과대적합)
- 보통 결정계수값은 0.7 ~ 0.8을 목표치로 설정한다.
※ 선형방정식을 이용해 모델이 예측한 값 분석
# 예측
pred = model.predict(X_test.iloc[:1])
print(pred)
# 머신러닝 모델이 학습한 기울기(가중치), 절편을 확인
# - 기울기(가중치)
print(model.coef_)
# - 절편(Bias)
print(model.intercept_)
회귀분석을 위한 머신러닝 모델의 평가 함수
- 결정계수(score 메소드 사용)
: 데이터에 상관없이 결과의 범위를 이용하여 모델 평가 - 평균절대오차
: 실제 정답과 모델이 예측한 값의 차이를 절대값으로 평균 - 평균절대오차비율
: 실제 정답과 모델이 예측한 값의 비율 차이를 절대값으로 평균 - 평균제곱오차
: 실제 정답과 모델이 예측한 값의 차이의 제곱값 평균
from sklearn.metrics import r2_score #결정계수
from sklearn.metrics import mean_absolute_error #평균절대오차
from sklearn.metrics import r2_score mean_absolute_percentage_error #평균절대오차비율
from sklearn.metrics import r2_score mean_squared_error #평균제곱오차
# 평가를 위해서는 모델이 예측한 값이 필요
pred = model.predict(X_train)
mae = mean_absolute_error(y_train, pred)
※ 선형 모델이 학습한 가중치를 활용하여 중요도를 파악하는 방법
- model.coef_를 통해 설명변수 X를 구성하는 각 특성별 가중치를 확인
- 특정 컬럼에 대한 가중치 값이 0이라면 결과에 영향을 주지않는 특성임
- 특정 컬럼에 대한 가중치 값의 절대값이 높을수록 영향력이 큰 특성임
'머신러닝' 카테고리의 다른 글
[머신러닝] 선형 모델의 성능 향상을 위한 방법 (0) | 2022.04.22 |
---|---|
[머신러닝] Ridge, Lasso 클래스 (0) | 2022.04.22 |
[머신러닝] K-최근접 이웃 알고리즘(K-NN) (0) | 2022.04.22 |
[머신러닝] 데이터 분석의 과정 - 머신러닝 모델의 구축 (0) | 2022.04.22 |
[머신러닝] 데이터 분석의 과정 - 개요 (0) | 2022.04.22 |