- 네이버부스트캠프
- 코딩테스트 python
- 이기적
- 기초다지기
- 프로그래머스
- 빅데이터분석기사
- 정보처리기사
- SQL
- 데이터베이스
- AI 플랫폼을 활용한 데이터 분석
- r
- [멀티잇]데이터 시각화&분석 취업캠프(Python)
- 난생처음 R코딩&데이터 분석 저서
- 파이썬
- python
- Oracle
- 데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- boostcoures
- 부스트코스
- Machine Learning
- DB
- 오라클
- 인공지능기초다지기
- 빅분기
- 빅데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 코딩테스트
- PY4E
- boostcourse
- Ai
- 이것이 취업을 위한 코딩테스트다 with 파이썬
- Today
- Total
매일공부
[Machine Learning] 교차검증 본문
모델 정확도 평가; 오차측정 지표 >> https://dailystudy.tistory.com/95
지도학습 | 회귀/분류 모형구성 | 후보모형 성능 평가 | 최종 모형 튜닝 | |
1. Data Set 수집 | 2. Feature 추출 | 3. 학습 Model 선정 | 4. Model 평가 | 5. Model 최적화 |
비지도학습 | 세그먼트 분류 | 세그먼트 통계량 분석 | 세그먼트 프로파일 정의 |
<분류분석에서 사용되는 측정 지표>
- 정확도(Accuracy)
- 오차 행렬(confusion matrix)
- 정밀도(precision)
- 재현율(recall)
- F1 스코어
- ROC AUC
교차 검증
- 과적합 : 모델이 학습 데이터에만 과도하게 최적화되어, 실제 예측은 다른 데이터로 수행할 경우에는 예측 성능이 떨어지는 것
- 교차 검증
: 데이터를 학습용/평가용 데이터 세트로 여러 번 나누고 모델을 학습하여 평균적인 성능을 계산, 평가하는 방법
: 한 번 나누어서 학습하는 것에 비해 일반화된 성능을 얻을 수 있기 때문 (안정적이고 뛰어난 통계적 평가 방법)
: 하이퍼파라미터나 모델의 최적화 시, 최적의 조건을 찾는 데에 활용
: 모든 데이터를 평가와 학습에 사용할 수 있어 머신러닝 알고리즘의 일반화된 성능을 얻을 수 있다
: 모든 데이터를 평가와 학습에 사용할 수 있어 연산 비용(memory, cpu, 시간)이 증가
- K-Fold 교차 검증(KFCV)
- from sklearn.model_selection import KFold (n_splits=, shuffle=, random_state=)
- K개의 데이터 폴드 세트를 만들어서 K번만큼 각 폴드 세트에 학습과 검증 평가를 반복적으로 수행하는 방법
- Kfold와 StratifiedKFold 클래스 제공
- 데이터를 폴드(fold)라고 부르는 k개의 부분을 나눔
> k-1개 폴드를 하나의 훈련 세트로 합쳐 모델을 훈련하고 남은 폴드를 테스트 세트처럼 사용
> 이를 k번 반복마다 다른 폴드를 테스트 세트로 사용
> k번 반복해서 얻은 모델 성능을 평균하여 최종 성능 산출 - 각 샘플이 다른 샘플과 독립적으로 생성되었다고 가정하므로,
KFCV를 사용하여 분류기를 평가할 때, 각 타깃 클래스의 샘플이 거의 같은 비율로 폴드 구성을 권장
from sklearn import datasets
from sklearn import metrics
from sklearn.model_selection import KFold, cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
digits = datasets.load_digits() # 데이터셋 로드
features = digits.data # 특성 행렬을 만듭니다.
target = digits.target # 타깃 벡터를 만듭니다.
standardizer = StandardScaler() # 표준화 객체를 만듭니다.
logit = LogisticRegression() # # 로지스틱 회귀 객체를 만듭니다
# 표준화한 다음 로지스틱 회귀를 실행하는 파이프라인을 만듭니다.
pipeline = make_pipeline(standardizer, logit)
# k-폴드 교차검증을 만듭니다. (10 개의 폴드를 만듦)
kf = KFold(n_splits=10, shuffle=True, random_state=1)
# k-폴드 교차검증을 수행합니다.
cv_results = cross_val_score(pipeline, features, target, cv=kf, # 교차 검증 기법
scoring="accuracy", # 평가 지표
n_jobs=-1) # 모든 CPU 코어 사용
cv_results.mean() # 평균을 계산
cv_results ## 10개 폴드의 점수를 모두 확인(평가 점수는 cv_results에 저장)
array([0.97777778, 0.98888889, 0.96111111, 0.94444444, 0.97777778,
0.98333333, 0.95555556, 0.98882682, 0.97765363, 0.93854749])
- StratifiedKFold
: from sklearn.model_selection import StratifiedKFold
: 불균형한 분포도를 가진 레이블(결정 클래스) 데이터 집합을 위한 K 폴드 방식
from sklearn.model_selection import StratifiedKFold
skf = StratifiedKFold(n_splits=3)
for train_index, test_index in skf.split(iris_df, iris_df['label']):
label_train = iris_df['label'].iloc[train_index]
label_test = iris_df['label'].iloc[test_index]
print('학습데이터 label 분포:', label_train.value_counts())
print('검증데이터 label 분포:', label_test.value_counts())
print('-------------------------------')
- StratifiedShuffleSplit
: from sklearn.model_selection import ShuffleSplit ( n_splits=, train_size=, test_size=, random_state= )
: 계층별 교차 검증
: 반복 횟수에 상관없이 훈련 폴드와 테스트 폴드 크기를 임의로 지정할 수 있음
: 반복마다 랜덤하게 분할하기 때문에 하나의 샘플이 여러 번 테스트 폴드에 포함될 수 있음
- 정확도와 정밀도를 사용한 교차검증
: from sklearn.model_selection import cross_validate
: cross_validate(logit, X, y, scoring=["accuracy", "precision"])
: scoring 매개변수에 여러 개의 평가 지표를 추가가능
- sklearn.model_selection.cross_val_score(estimator, X, y, cv)
: cv 매개변수를 지정하지 않으면 회귀일 때는 KFold, 분류일 때는 StratifiedKFold 분할기가 사용됨
: cv 매개변수에 정수를 입력하여 기본 분할기의 폴드 수를 지정할 수 있습니다.
# -1 * metrics.mean_absolute_error() = neg_mean_absolute_error 로 보정하는 이유?
사이킷런의 score()는 값이 클수록 좋은 평가 결과로 자동 평가하기 때문
※ cross_val_score나 GridSearchCV와 같은 sklean의 Scoring 함수에 회귀 평가 적용시 주의할 점
scoring 함수에 회귀 평가 지표를 적용 할 때는
MAE => 'neg_mean_absolute_error'로,
MSE => 'neg_mean_squared_error'로,
R제곱 => 'r2'로
scoring 파라미터에 적어주는데,
sklearn에서는 score값이 클수록 좋은 평가 결과로 자동 평가
>> 실제 값과 예측 값의 오류 차이를 기반으로 하는 회귀 평가 지표의 경우 값이 커지면 오히려 나쁜 모델이라는 의미
>> 이를 사이킷런의 Scoring 함수에 일반적으로 반영하려면 보정 필요
>> -1을 원래의 평가 지표 값에 곱해서 음수를 만들어 작은 오류 값이 더 큰 숫자로 인식하게 함.
Evaluation2. 회귀의 성능 평가 지표(MAE, MSE, RMSE, R제곱)
권철민 강사님의 '파이썬 머신러닝 완벽 가이드'을 학습하고 정리한 것입니다. 배우는 중이라 잘못된 내용이 있을 수 있으며 계속해서 보완해 나갈 것입니다. :)) 머신러닝의 프로세스는 - 데이
libertegrace.tistory.com
* 내용참고&출처 : 태그에서 수강한 수업을 복습 목적으로 정리한 내용입니다.
'IT > ML' 카테고리의 다른 글
[Machine Learning] 자료의 종류의 따른 회귀분석 모델 (0) | 2022.11.30 |
---|---|
[Machine Learning] 회귀의 가설검정&분산분석 (0) | 2022.11.28 |
[sklearn] 학습과 검증셋 분리 (0) | 2022.11.21 |
[sklearn] Data Preprocessing (0) | 2022.11.21 |
[sklearn] 사이킷런 (scikit-learn) 주요 모듈 (0) | 2022.11.20 |