2023.03.15
● 엑스트라 트리 모델 엑스트라 트리란?
더 랜덤 포레스트가 있는 고도로 랜덤화된 앙상블 학습 모델입니다.
추가 트리 – 무작위 분할
랜덤 포레스트 – 최적 분할
from sklearn.ensemble import ExtraTreesRegressor
# Building the model
extra_reg = ExtraTreesRegressor()
# Training the model
extra_reg.fit(X, y)
● 회귀는 정답이 예측에 얼마나 가까운지를 측정합니다!
분류에 사용되는 정밀도는 정답이 몇 개인지(y_predict와 y_test의 일치 값 수)를 평가하기 때문에,
정확도를 기반으로 회귀 모델을 평가하는 것은 적절하지 않습니다!
● r2_score 결정 계수
1에 가까울수록 좋음!(종속변수와 독립변수의 상관관계가 높을수록 1에 가까움)
● 회귀 모델 스코어링 지표:
평균 절대 오차(MAE)
평균 제곱 오차(MSE)
평균 제곱 오차(RMSE)
평균 제곱근 로그 오류(RMSLE)
R 제곱(결정 척도)
후버 손실
● 나머지는 측정값에서 예측값을 뺀 값 수단
Question: 실수할수록 벌점을 주는 공식은 무엇인가요? 잘못된 값의 절대값만 보고 싶다면 => MAE 페널티를 주고 싶다면 실수를 하세요 => MSE(정사각형이기 때문에) 잘못된 값에 대한 편차를 보고 싶다면 => RMSE 몇 가지 오류에 대해 더 많은 페널티를 주고 많은 오류에 대해 더 적은 페널티를 주고 싶다면 => RMSLE |
● SOTA 모델이란 무엇입니까?
“SOTA”는 “state-of-the-art”를 의미하며 “현재 동급 최고의 결과”를 가진 모델, 즉 현재 수준에서 가장 높은 정확도를 가진 모델을 나타냅니다.
성능 차이를 만드는 것은 EDA를 통한 모델 참조입니다.
● astype()을 사용하여 문자열로 변환하고 년-월로 추가합니다.
-> 데이터를 기능으로 사용하기 위해서는 One Hot Encoding처럼 디지털화 되어야 합니다.
이 시점에서 서수 인코딩을 적용할 수 있습니다.
● 서수 인코딩이란 무엇입니까?
주문 데이터 암호화
– 범주형 데이터 값의 순서 여부를 고려하지 않고 숫자를 할당하는 레이블 인코딩과 달리 서수 인코딩은 데이터가 서수인지 여부를 고려하여 숫자 값을 할당합니다.
– 카테고리가 너무 많아 핫코딩이 모호한 상황에서 좋은 코딩 방법입니다.
● 기억하다 정규 분포로 가져오기: 스케일링
* 다양한 스케일링 방법
-표준화
– 표준화(z-score)(값-평균)/평균분산은 0, 표준편차는 1
– Min-Max (값 – 최소값) / (최대값 – 최소값) 최대값은 1로, 최소값은 0으로 변경
– Robust(위의 두 가지 방법과 달리 강인함을 의미, 이상치 제거에 효과적임)(value – median) / IQR median을 0으로 설정
-> 스케일링 시 이상값과 데이터 왜곡에 주의하세요!
● 로그 변환
– 카운트 값에 로그를 적용하면 일방적으로 너무 뾰족한 분포가 보다 부드러운 분포가 됩니다.
– 너무 삐뚤어지거나 한쪽으로 너무 날카로운 데이터는 매끄럽게 처리됩니다.
정규 분포와 비슷합니다.
– 로그 값을 사용하면 이상값의 영향을 덜 받습니다. 지수 함수 = log + 1로 log+1 값 복원
– 1을 더한 이유는 1보다 작은 값은 음수가 나오므로 가장 작은 값인 1을 더하면 음수가 나오는 것을 방지할 수 있습니다.
– 로그 값은 np.log를 통해 원래 값으로 재설정할 수 있습니다.
– 예측 값을 로그 값으로 재설정
● 회귀 모델에 사용할 수 있는 여러 레이블 평활화 기술이 있습니다.
몇 가지 예가 아래에 나와 있습니다.
Add Noise to Correct Labels 올바른 레이블 값에 소량의 노이즈를 추가하여 소프트 레이블 값을 적용합니다.
예를 들어 올바른 레이블이 100인 경우 95에서 105 사이의 값으로 설정하여 노이즈를 추가할 수 있습니다.
– 로그 변환
올바른 레이블의 대수 변환 후 평활 레이블 값을 할당합니다.
예를 들어 올바른 레이블이 100인 경우 2.0으로 로그 변환하고 해당 값에 노이즈를 추가한 다음 평활 레이블 값을 할당할 수 있습니다.
– 표준 편차
부드러운 레이블 값은 여분의 올바른 레이블 값에 표준 편차를 추가하여 할당됩니다.
예를 들어 올바른 레이블이 100이고 표준 편차가 10이면 소프트 레이블 값으로 110을 할당할 수 있습니다.
– 확률분포의 변환
정답 레이블을 부드러운 확률 분포로 변환하여 부드러운 레이블 값을 할당합니다.
예를 들어 정답 레이블이 100이고 표준 편차가 10인 경우 정규 확률 분포에서 임의로 추출한 소프트 레이블 값을 할당할 수 있습니다.
따라서 회귀 모델에서 사용할 수 있는 다양한 레이블 평활화 기법이 있으며, 문제의 특성에 따라 적절한 방법을 선택하여 사용할 수 있다.
● 배깅과 부스팅의 차이점
배깅 모델: 병렬 트리 학습
부스팅 모델: 트리의 순차적 학습
● 트리 패밀리 모델
분류와 회귀 모두 가능
화이트 박스 모델(설명 가능한 인공 지능)
안정적이며 많은 양의 데이터에서도 작동합니다.
Question : 에포크어떻게 해석해야 할까요? Epoch는 모델을 훈련할 때 전체 데이터가 학습된 횟수입니다! GBM => Epoch를 n_estimators로 생각할 수 있습니다. 오류에 대한 학습과 보상이 지속적으로 반복되어 새로운 트리가 생성되기 때문입니다. n_estimators는 트리의 개수이지만 훈련 빈도를 의미하기도 합니다. 트리가 병렬로 생성되는 것이 아니라 순차적으로 생성되기 때문입니다. GBM을 사용하면 트리를 시각화할 수 있습니다. 너무 많은 병렬 트리가 있기 때문에 한 번에 모두 시각화하기가 어렵습니다. 그러나 트리를 하나씩 구축할 경우 시각화할 트리 수를 지정하여 트리를 시각화할 수 있습니다. 트리 시각화 기능은 XGBoost, LightGBM 등에서 제공됩니다. |
● 앙상블 : 여러 트리를 결합하는 방법!
– 배깅 기술 -> Random Forest, 트리 모델 추가
트리를 병렬로 생성
히스토그램 기반 부스팅 트리를 제외하고는 값이 누락되면 작동하지 않으므로 누락된 값을 채우거나 제거해야 합니다.
– 부스팅 테크닉 -> XGBoost, 슬로프 부스트
배깅 기법이 여러 개의 트리를 생성하고 결합할 때,
부스팅 기법은 이전 트리에서 잘못된 부분에 가중치를 부여합니다.주어진 지속적인(순차적) 학습 오답과 유사
부스팅 기술 파라미터
learning_rate: 오차가 최소인 지점을 찾았을 때 최적의 가중치를 향하여 얼마나 빨리 또는 느리게 움직이는지 결정하십시오.
너무 크면 최소점을 찾지 않고 통과합니다. 너무 작으면 매우 느림
손실 : 손실 함수
n_estimators : epoch와 유사
● 경사하강법의 목적
손실이 가장 적고 예측이 좋은 모델의 매개변수를 찾는 것입니다.
● 2차 손실을 더 자주 사용하는 이유는 무엇입니까?
절대 손실을 사용하면 차이 값이 같은 방향이고 미분하면 같은 차이 값을 줄 때 기울기가 각 부호의 부호와 같은 기울기를 가지므로 기울기가 큰지 작은지 비교할 수 없습니다. .
● 기울기 증가 기계
가중치를 업데이트하는 부스트에 경사 하강을 추가하는 기계 학습 방법입니다.
– 샘플 가중치를 수정하는 대신 이전 모델의 잔차로 새 모델을 학습합니다.
– 앙상블에 모델을 하나씩 추가하여 이전 오류를 보상하기 위해 샘플의 가중치를 수정할 수 있습니다.
질문: 뒤늦게 더 큰 공부를 했는데 결과가 더 잘 나온 이유가 있나요? 학습이 더 빠르고 더 나은 학습을 위해 데이터는 learning_rate가 기본값보다 크다는 것을 보여줍니다. learning_rate의 증분이 너무 크면 검색이 거칠기 때문에 최소값을 초과할 수 있습니다! |
임의 검색: 그리드 검색(grid search)으로는 찾을 수 없는 임의의 위치에서 좋은 매개변수 찾기
● 하이퍼파라미터란?
– 모델링 시 사용자가 직접 설정한 값
– 학습률, C, Support Vector Machine의 시그마 값, ANN의 k 값 등
– 머신러닝 모델 사용 시 사용자 지정 값
– 설정된 최적값은 없지만. 휴리스틱 방법이나 경험 법칙에 의해 결정되는 경우가 많습니다.
– 하이퍼파라미터를 자동으로 선택하는 라이브러리를 사용할 수도 있습니다.
● 하이퍼파라미터를 최적화하는 방법
– 검증된 하이퍼파라미터 값을 얻기 위해 교차 검증을 직접 수행할 수 있습니다.
● GridSearchCV란?
GridSearchCV는 교차 검증 결과를 기반으로 기계 학습 모델의 최적 매개변수를 검색합니다!
하이퍼파라미터를 순차적으로 입력하여 학습과 측정에 가장 적합한 파라미터를 보여줍니다!
매개변수 유형 파라미터 변수 선언 및 입력 예
parameters = {'max_depth':(1,2,3), 'min_samples_split':(2,3)}
추정기(문자열) : 분류자, 회귀자, 파이프라인
param_grid(dict) : 사용할 파라미터 이름, dict 형식의 값
점수(문자열) : 예측 성능을 측정하기 위한 스코어링 방법 지정
이력서 (정수) : 교차 검증을 위해 분할할 훈련/테스트 세트 수를 지정합니다.
변환(부울) : true이면 최적의 하이퍼파라미터를 찾은 후 적절한 하이퍼파라미터로 입력 객체를 재학습
질문: parameters = {‘kernel’:(‘linear’, ‘rbf’), ‘C’:(1, 10)} 에서 목록 대신 튜플로 커널에 넣는 이유가 있습니까? 변경되지 않는 값의 경우 튜플이 약간 더 빠릅니다. 둘 다 사용하셔도 상관없습니다. |
● 트리 학습 후 오차 측정
그라데이션 사용 -> 오류가 최소화된 지점을 찾아라!
엘erning_rate : 오차가 최소인 지점(보폭)을 찾을 때 최적의 무게에 얼마나 빨리 또는 느리게 접근하는지 결정
학습률이 너무 크면? => 발산
학습률이 너무 낮으면? => 천천히
● GridSearch가 RMSE로 분류되는 이유는 무엇입니까?
이미 정답에 대한 로그를 취했으므로 이것은 RMSLE가 아니라 RMSE로 계산됩니다.
질문: cross_val_predict에서 verbose가 1과 2로 설정된 경우 출력의 차이점은 무엇입니까? verbose가 함수 인자일 때 일반적으로 함수 실행 시 생성되는 상세 정보를 표준 출력으로 상세하게 보내는지 여부를 나타낸다. 일반적으로 0은 출력되지 않고, 1은 상세 정보이며, 2는 암시적 정보입니다. |
질문: label_name에서 log1p를 실행하는 것과 loss=RMSE로 최상의 추정기를 찾고 label_name을 그대로 두는 것과 loss=RMSLE로 최상의 추정기를 찾는 것 사이에 차이가 있습니까? 정답에는 이미 대수가 적용되어 있기 때문에 RMSLE로 측정하면 대수가 두 번 걸립니다. RMSLE로 측정하려면 예측 값으로 expm1을 다시 실행하고 RMSLE로 측정해야 합니다. 그러나 여기서는 그대로 로그를 적용하여 예측한 값을 사용하여 RMSLE로 평가한 RMSE로 평가한 동일한 공식을 사용한다. |