from sklearn.metrics import accuracy_score
accuracy_score(y_test, pred)
1. 데이터 셋 분리
2. 모델 학습
3. 예측 수행
4. 평가
3. 사이킷런의 기반 프레임워크 익히기
사이킷런은 많은 유형의 classifier와 regressoor 클래스를 제공함
이 둘을 합쳐서 Estimator클래스라고 부름. 즉, 지도학습의 모든 알고리즘을 구현한 클래스를 통칭해서 Estimator라고 부름.
cross_val_score와 같은 evaluation 함수, gridsearch와 같은 하이퍼 파라미터 튜닝을 지원하는 클래스의 경우 Estimator를 인자로 받음.
비지도 학습에서의 fit은 지도학습의 fit과 다르게 입력 데이터의 형태에 맞춰 데이터를 변환하기 위한 사전 구조를 맞추는 작업이다. 실제 작업은 transform()으로 실행
4. model_selection 모듈 소개
train test를 분리하거나 교차 검증 분할 및 평가, Estimator의 하이퍼 파라미터를 튜닝하기 위한 다양한 함수와 클래스 제공
교차검증은 학습데이터를 다시 분할하여 validation set으로 사용
Stratified K폴드는 불균형한 분포도를 가진 레이블 데이터 집합을 위한 방식
원본 데이터와 유사한 레이블의 분포를 학습/테스트 셋에도 유지하는게 중요
일반적으로 분류에서의 교차 검증은 K 폴드가 아니라 Stratified K폴드로 분할돼야함.
하지만 회귀에서는 Stratified K폴드가 지원되지 않음.
(레이블이 연속된 숫자값이기 때문에)
cross_val_score(estimator, X,y,scoring,cv)
scoring : 예측 성능 평가 지표
cv = 교차 검증 폴드 수
estimator가 classifier면 stratified K 폴드 방식 사용
성능 지표 측정값을 배열 형태로 반환
GridSearchCV : 교차 검증과 최적 하이퍼 파라미터 튜닝을 한 번에
GridSearchCV(dtree, param_grid = grid_parameters, cv=3, refit=True)
estimator, param_grid
scoring
refit : 디폴트가 true이며 true일 시 최적의 하이퍼 파라미터를 찾은 뒤 입력된 estimator 객체를
해당 하이퍼 파라미터로 재학습시킴
결과는 cv_results_ 에 기록됨.
scores_df = pd.DataFrame(grid_dtree.cv_results_)

rank_test_score : 예측 성능 순위
5. 데이터 전처리
null값, 문자열은 허용안됨.
from sklearn.preprocessing import LabelEncoder
items = ['a','b','c','d','e', 'e', 'a']
encoder= LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
encoder.classes_
array(['a', 'b', 'c', 'd', 'e'], dtype='<U1')
encoder.inverse_transform([0,1,2,3])
array(['a', 'b', 'c', 'd'], dtype='<U1')
선형회귀 같은 알고리즘에는 레이블 인코딩 적용하면 안됨
숫자 값의 경우 크고 작음에 대한 특성이 작용하기 때문이다.
하지만 트리 계열 알고리즘은 숫자의 이러한 특성을 반영하지 않으므로 레이블 인코딩도 별 문제가 없다.
-> 원핫인코딩으로 해결
oneHotEncoder와 get_dummies 차이
범주형데이터 인코딩 OneHotEncoder, get_dummies 의 차이점
범주형전처리개짜증나 이번 포스팅의 주제는 범주형 변수 인코딩하기 + 훈련 후 예측 시 새로운 데이터가 들어왔을 때 어떻게 되는가 OneHotEncoder 간단한 데이터를 만들어서 살펴보자
hhhh88.tistory.com
표준화 : 정규분포로 변환 -> StandardScaler
정규화 : 서로 다른 피처의 크기를 통일하기 위해 크기 변환 -> MinMaxScaler
스케일링 변환 시 유의점
테스트에는 transform만 사용 -> 학습데이터와 테스트 데이터의 스케일링 기준 정보가 서로 달라지기 때문이다.
학습데이터와 테스트 데이터의 서로 다른 원본값이 동일한 값으로 변환되는 결과 초래 가능
가능하다면 전체데이터의 스케일링 변환을 적용한 뒤 학습과 테스트 데이터로 분리
타이타닉
df['age'].fillna(10, inplace=True)
앞문자만 추출
df['cabin'] = df['cabin'].str[:1]
age같이 값 종류가 많으면 범위별로 분류해 카테고리 값을 할당하는 것도 굉장히 좋음
'머신러닝' 카테고리의 다른 글
| 파이썬 머신러닝 완벽가이드 - 4장 (0) | 2021.10.10 |
|---|---|
| 파이썬 머신러닝 완벽가이드 - 3장 (0) | 2021.10.02 |
| 파이썬 머신러닝 완벽가이드 - 1장 (0) | 2021.09.07 |
| 알고리즘 체인과 파이프라인 (0) | 2021.08.09 |
| 모델 평가와 성능 향상 (0) | 2021.08.05 |