티스토리 뷰
TIL & WIL/Machine Learning
0601. ExtraTreesRegressor / CrossValidation / 회귀모델 평가
니츄 2023. 3. 14. 17:05※ regressor은 회귀에서 사용하는 ExtraTree모델.
📝 잔차와 오차란?
- 잔차(residual) : 실제값과 모델이 예측한 값의 차이. 각 데이터 포인트마다 계산된다.
- 잔차 = 실제값(측정값) - 예측값
- 잔차는 모델의 예측값과 실제값 사이의 차이를 의미한다.
- 즉, 잔차는 오차와 마찬가지로 모델의 성능을 평가하는데 사용되지만,
모델을 훈련할 때 사용되는 오차와는 다르다.
잔차플롯 해석하기

Residual plot 에서 각각의 점들이 수평선을 기준으로 하여 랜덤하게 분포한다면 해당 회귀모형은 데이터에 있어 적합하다. 만일 그렇지 않다면 linear 한 모델이 아닌 non-linear 한 모델이 더 적합 하다는 것을 의미한다.
- 오차(error) : 잔차들의 평균적인 크기를 나타내는 값
- 오차 = (잔차_1 + 잔차_2 + ... + 잔차_n) / n
- 머신러닝에서 오차는 모델이 주어진 입력에 대해 예측한 값과 실제값 사이의 차이를 의미한다.
- 즉, 모델이 주어진 입력에 대해 얼마나 정확한 예측을 했는지를 측정하는 척도.
- 머신러닝에서 모델을 훈련할 때 사용되는 오차는 일반적으로 손실함수(loss function)를 사용하여 정의되며,
이를 최소화하는 방향으로 모델의 파라미터를 조정한다. - error => MAE, MSE, RMSE, RMSLE, MAPE
|
| MAE (Mean Absolute Error) |
MSE (Mean Squared Error) |
RMSE (Root Mean Squared Error) |
RMSLE (Root Mean Squared Logarithmic Error) |
|
| 정의 | 평균절대오차 | 평균제곱오차 | 평균제곱근오차 | |
| 구하는 방법 | 오차 절대값의 평균 | 오체 제곱의 평균 | MSE의 제곱근 | 로그를 취하고 RMSE |
| 사용용도 | 틀린 값에 대한 절대값만 보고자 할 때 | 많이 틀릴수록 패널티를 주고자 할 때 |
틀린 값에 대한 편차를 보고자 할 때 |
적게 틀린 것에 대해 패널티를 주고, 아주 많이 틀린 것에 더 적게 패널티를 주고자 할 때 |
# MSE는 분산의 공식과 유사하다.
# RMSE는 표준편차의 공식과 유사하다.
1. MAE(Mean Absolute Error) 구하기

# 첫 번째 방법
abs(y_train - y_valid_predict).mean()
# 두 번째 방법 (import 과정 필요)
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_train, y_valid_predict)
2. MSE(Mean Squared Error)

- 오차의 제곱을 평균으로 나눈 것이기 때문에 분산을 구하는 과정과 비슷함
# 첫 번째 방법 : 직접 제곱하기
((y_train - y_valid_predict)**2).mean()
# 두 번째 방법 : np.square 사용하기
np.square(y_train - y_valid_predict).mean()
# 세 번째 방법 (import과정 필요)
from sklearn.metrics import mean_squared_error
mean_squared_error(y_train, y_valid_predict)
3. RMSE(Root Mean Squared Error)

- MSE값에 루트를 씌운 것으로 표준편차와 공식이 유사함.
# 첫 번째 방법 : numpy 사용하기
np.sqrt(mse)
# 두 번째 방법 : 직접 루트 씌우기
mse ** 0.5
# 세 번째 방법 (import 과정 필요)
mean_squared_error(y_train, y_valid_predict) ** 0.5
4. RMSLE(Root Mean Squared Logarithmic Error)
: MSE에 로그를 취하고 제곱한 것.

- RMSLE를 사용하는 이유?
- 로그를 적용해주면 상대적으로 큰 값에 대한 스케일을 줄이게 되어, 차이가 많이 나는 값에 대해 더 잘 평가할 수 있다.
📝 데이터셋 살펴보기
- 대부분이 수치형 변수일 경우 : 필요시 날짜변수 생성하기
- 히스토그램으로 데이터 경향 파악하기 : 점수의 차이 만드는 것 = 데이터를 어떻게 넣어서 모델게 힌트를 주느냐.
(EDA)
📝 [복습] 머신러닝의 기본 프로세스
1. 기출문제를 한번 풀어본다 -> X_train으로 학습!
2. 풀어본 기출문제의 정답을 보고 채점해보자 !! -> y_train 으로 정답을 채점한다 !
-> 위 두 과정을 사이킷런의 API에서는 fit() 으로 담아줄 수 있습니다
3. 실제 모의고사에서 시험을 쳐본다! -> X_test로 모델의 실력을 점검한다.
4. 실제 모의고사의 정답을 확인한다! (모델 학습의 목표) -> 모델의 성적 y_test (예측해야할 Label값) 를 확인한다!
-> 위 과정은 predict() 로 수행하고 여러 가지 평가 기준에 따라 점수를 출력해볼 수 있습니다
📝 회귀에서의 평가
- 분류 : Accuracy : 얼마나 정답을 맞혔는지 평가 : 일치도.
- 회귀 : 정답이 예측과 얼마나 가까운지 평가 : 인접도
- => 회귀 평가에 accuracy를 사용하는 것은 적절하지 않다.
- 회귀 평가지표로는 error 측정지표를 사용하는 것이 적절. (MAE, MSE, RMSE, RMSLE)
(무엇을 평가하고 싶은지에 따라 선택하여 평가하기) - R square Score로도 평가 가능하다.
📝 Ordinal-Encoding
- 순서가 있는 데이터를 인코딩하는 방법
- 문자형 데이터를 숫자형 데이터로 변환해주는 방
- 범주형 자료값이 순서인지 아닌지 고려하지 않고 숫자를 부여하는 Label Encoding과는 다르게
Ordinal Encoding은 순서형 자료인지를 고려하여 숫자값을 부여한다. - 범주가 너무 많아 One hot Encoding을 하기 애매한 상황에서 이용하기 좋은 인코딩 방법이다.

- 예를 들어 poor, good, very good, excellent를 나타내는 변수에서는 순서가 중요한 변수이지만,
빵, 요거트, 컵케익을 나타내는 변수에 대해서는 순서가 있는 변수가 아니므로
순서가 부여되는 ordinal encoding 기법은 적절하지 않을 수 있습니다.
📝astype( ).cat.codes는 무엇이고 언제 쓰나요? (chat gpt에게 물어봤다)
- astype().cat.codes는 pandas 라이브러리의 DataFrame 및 Series 객체에서 범주형 데이터를 숫자 코드로 변환하는 데 사용되는 기능이다.
- cat 속성 : 데이터프레임이나 시리즈 객체에서 범주형 데이터를 다루는데 사용되는 속성
- codes 속성 : 범주형 데이터를 숫자 코드로 변환하여 반환하는 속성
- 해당 코드를 사용하면 범주형 데이터를 분석하는데 편리하게 사용할 수 있다.
'TIL & WIL > Machine Learning' 카테고리의 다른 글
| 0801. Bag of Word와 TF-IDF (0) | 2023.03.28 |
|---|---|
| XGBoost 알아보기 (0) | 2023.03.21 |
| 0503. One-Hot-Encoding(Scikit-learn) / train 평가 / cross validation 기법 (0) | 2023.03.14 |
| 0502. 범주형 데이터/ One-Hot-Encoding(pd.get_dummies)/ RandomForest (0) | 2023.03.13 |
| 0501. Scikit-learn API기초 / DecisionTree (1) | 2023.03.13 |