Linear Regression 클래스
:오차제곱합을 최소화해 OLS추정방식으로 구현한 클래스
fit()메서드로 x,y배열 입력 받으면 w(회귀계수)를 coef_속성에 저장
선형 회귀의 다중 공선성 문제
일반적으로 선형회귀는 입력피처의 독립성에 많은 영향을 받는다
피처 간의 상관관계가 매우 높은 경우 분산이 매우 커져서 오류에 민감해져
=> 상관관계가 높은 피처가 많은 경우 독립적인 중요한 피처만 남긴다
회귀 평가지표
평가는 실제값와 예측값의 차이를 기반으로
실제값이랑 예측값을 그냥 빼버리면 상쇄가 된다->절대값 평균이나, 제곱, 제곱에 루트씌운 평균값을 구한다
- MAE : Mean Absolute Error. 실제 값과 예측값의 차이를 절댓값으로 반환해 평균한것
- MSE(=RSS) : Mean Squared Error. 실제 값과 예측값의 차이를 제곱해 평균한것
- MSLE : MSE에 로그를 적용한것. 결정값이 클수록 오류값도 커지기 때문에 일부 큰 오류값들로 인해 전체 오류값이 커지는 것을 막아줌
- RMSE : MSE 값은 오류의 제곱을 구하므로 실제 오류 평균보다 더 커지는 특성이 있으므로 MSE에 루트를 씌운것
- RMSLE : RMSE에 로그를 적용한것
- R^2 : 분산 기반으로 예측 성능을 평가. 실제 값의 분산 대비 예측값의 분산 비율을 지표로 하며, 1에 가까울수록 예측 정확도가 높음
-> 값이 작을 수록 성능이 좋은 것. 그래서 지표값에 -1을 곱해서 음수로 만들어
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
1. 데이터셋 가져오기
사이킷런에 내재되어있는 데이터셋이라서
load_boston()으로 로드한다
2. 피처설명
![]() |
|
3. EDA(탐색적 분석방법)
:['RM', 'ZN', 'INDUS', 'NOX', 'AGE', 'PTRATIO', 'LSTAT', 'RAD'] 피쳐를 이용해 TARGET 피쳐인 PRICE와의 상관관계를 시각적으로 확인
seaborn의 regplot() API는 X, Y축 값의 산점도와 함께 선형 회귀 직선을 그려줍니다. matplotlib.subplots()를 이용해 각 ax마다 칼럼과 PRICE의 관계를 표현
RM(방 개수)는 양의 선형성-> 방의 크기가 클수록 가격이 증가
LSTAT(하위 계층의 비율)은 음의 선형성-> 하위계층의 비율이 적을수록 price가 증가
4. 주택가격의 회귀모델 만들기
:회귀 모델을 만든다는 것은 각 feature에 대한 최적의 가중치 값을 구하는 것
MSE는 (실제값-예측값)^2의 합의 평균
RMSE는 MSE에 루트 씌운 것
5. 절편과 회귀계수
intercept_는 y절편값(딱히 여기서는 별 의미 없음...)
lr_model.coef_ 는 최종으로 구하는 가중치 w값으로 13개가 나옴(506x14 행렬에서 price를 뺀 나머지 13개의 feature에 ㄷ관한 회귀계수이기 때문)
위 회귀계수를 통해 각각의 피쳐에 대한 회귀계수를 확인할 수 있다.
위 회귀계수를 살펴보면 양의 값으로는 RM 피처가 가장 높고(3.4), NOX 피처의 음수 값이 다른 피처에 비해 너무 큰것을 확인할 수 있다.
6, 교차검증
아래에서 cross_val_score를 통해 학습데이터 셋을 5 폴드로 나누어 교차검증을 진행
여기서 중요한 점은 sklearn의 scoring 함수는 score 값이 클수록 좋은 평가 결과로 평가한다는 점이다
하지만 선형 회귀 모델의 평가지표는 값이 낮을수록 우수한 모델
->scoring = "neg_mean_squared_error"을 반환하면 음수값이니까, -1곱해준다
'cs,코딩,알고리즘 > <파이썬 머신러닝 완벽 가이드>스터디' 카테고리의 다른 글
회귀(Regression) (0) | 2021.11.16 |
---|---|
분류 머신러닝 알고리즘(SMOTE, LightGBM을 이용)_신용사기검출 (0) | 2021.11.09 |
분류 머신러닝 알고리즘-결정트리(시각화와 과적합) (0) | 2021.10.04 |
지도학습 분류 모델 평가지표 (0) | 2021.09.27 |
피마 인디언 당뇨병 예측 (0) | 2021.09.25 |