1.사이킷런으로 시작하는 머신러닝
1) 학습/테스트 데이터 셋 분리
* 교차검증을 통해 교차 검증을 통해 모델의 일반화 성능을 평가하고 과적합을 판단
-> k-fold교차 검증, stratified k-fold, cross_val_score()
2) 최적의 파라미터 값찾기 gridsearchcv(), 여기서 cv=5이교 이거는 5개의폴드로 나눈다는 것임
3)데이터 인코딩 : labelencoder(),onehotencoder()
4)피처 스케일링과 정규화 : standardscaler()-표준화, minmaxscaler()-정규화
-> 규모가 다른 피처들의 영향을 동등하게 만듦
-> 모든 피처의 값의 범위를 비슷하게 만들어주면, 모델이 각 피처의 영향을 동등하게 고려
*총정리
머신러닝 애플리케이션
(데이터 가공 변환, 모델 학습 예측, 평가)
1)전처리 작엄(데이터의 가공 및 변환 과정)
-> 데이터 클렌징작업(오류데이터의 보정,결손값 처리)
->인코딩작업(레이블인코딩/원핫인코딩)
->데이터의 스케일링/정규화작업
2) 데이터세트 분리작업(데이터를 학습 데이터와 테스트 데이터로 분리)
3)모델을학습(학습데이터를 기반으로 머신러닝알고리즘을 적용)
4)예측을 수행(학습된 모델을 기반으로 데이터에 대한 예측 수행)
5)머신러닝 모델에 대한 평가(예측된 결괏값을 실제 결괏값과 비교)
->과적합 방지를 위한 학습데이터 세트를 학습 데이터와 검증데이터로 구성된 여러개의 폴드로 분리해 교차검증수행
(kfold,stratiriedkfold,cross_val_score()과 같은 함수를 이용하여 교차검증 진행)
->최적의 하이퍼 파라미터를 교차 검증을 통해 추출하기 위해 gridsearchcv 이용
2.평가
: 분류의 예측 성능을 평가하기 위한 다양한 방법!!/회귀는 다름!!/특히 분류의 성능 지표는 이진분류에서 중요
-> 분류 모델을 만들었을때 평가지표로 활용댐!! 임곗값을 조정하기 때문!
->get_clf_eval 함수 생성 및 평가: 정확도 정밀도 재현율 f1 auc 값 한번에 나타내기
1)정확도-> 불균형한 레이블 데이터 세트에서는 성능 수치로 사용되서는 안됨
2)오차행렬->예측을 수행하면서 얼마나 헷갈리고 있는지도 보여주는 지표
3)정밀도와 재현율->불균형한 데이터 세트에서 정확도보다 더 선호되는 지표!!!/positive데이터 세트의 예측 성능에 더 초점
*정밀도(TP/(FP+TP)):positive 예측 성능을 더욱 정밀하게 측정하기 위함/스팸메일 여부를 판단하는 지표
*재현율(TP/(FN+TP)): 암 판단 모델
-실제 positive양성인 데이터 예측을 negative로 잘못 판단하게 되면 업무에 큰 영향이 발생하는 경우
->recall_score()
#정밀도와 재현율의 트레이드 오프
-분류의 결정 임곗값(threshold)를 조정해 정밀도 또는 재현율의 수치를 조정할 수 있음
-다만 이둘은 상호 보완적인 평가 지표이기에 어느 한 쪽을 높이면 다른 하나의 수치는 떨어지기 쉬움
predict_proba(): 개별 데이터별로 예측 확률을 반환 하는 함수
binarizer() : 주어진 임곗값(threshold)을 기준으로 데이터를 이진화
precision_recall_curve() : 임곗값별 정밀도와 재현율 구하기
4)f1스코어 : 정밀도와 재현율을 결합한 지표,어느 한쪽으로 치우치지 않는 수치를 나타낼때 상대적으로 높은 값
5)roc곡선과 auc:
*roc곡선: roc곡선이 가운데 직선에 가까울 수록 성능이 떨어짐. 멀어질수록 성능이 뛰어남
fpr이 변할때 tpr이 어떻게 변하는지를 표현
(tpr: 재현율(민감도)-실제값positive(양성)가 정확히 예측돼야하는수준
tnr: 특이값-실제값 negative(음성)가 정확히 예측돼야 하는 수준/ (fp/(fp+tn))=1-특이성 = 1-tnr(tn/(fp+tn) )

roc곡선은 fpr을 0부터 1까지 변경하면서 tpr의 변화 값을 측정.
fpr은 분류 임계결정값을 조정하면서 변화시킴.ex)fpr을 0으로 만드려면 임곗값을 1로 지정.
임곗값을 1부터 0까지 변화시키면서 재현율 곡선을 구함
*roc_curve() 를 이용하여 roc곡선을 구함([precision_recall_curve()와 비슷. 다만 반환값이 fpr,tpr, 임곗값으로 구성)
*auc:roc곡선 밑의 면적을 구한 값. 1에 가까울 수록 좋은 수치
3.분류
1)결정트리
2)앙상블 학습(보팅,배깅,부스팅,스태킹)
->보팅은 다양한머신러닝 알고리즘을 가지고 학습!
3)랜덤포레스트
-> 배깅방식에서 많이 쓰이는게 결정트리를 모아놓은 랜덤포레스트!
4)gbm(gradient boosting machine)
기본적으로 결정트리기반의 앙상블 학습 알고리즘
->부스팅: 여러개의 약한 학습기를 순차적으로 학습하면서 잘못예측한 데이터에 가중치부여를 통해 오류개선을 향해 학습
->대표: 에이다부스트/그래디언트부스트
->시간적 문제로 새로 생긴 부스팅방식: xgboost(extra gradientboost), lightGBM->조기중단 가능
->lightGBM: xgboost와 함께 부스팅 계열 알고리즘에서 가장 각광을 받고 있음
-> 일반 gbm계열의 트리 분할 방법과 다르게 리프 중심 트리 분할 방식을 사용하고 있음
-> 기존 균형트리분할 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화됨
-> light gbm의 리프 중심 트리 분할 : 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성
*베이지안 최적화 기반의 hyperopt를 이용한 하이퍼 파라미터 튜닝
베이지안최적화 개요: 지금까지 하이퍼 파라미터 튜닝을 위한 사이킷런에서 제공하는 grid search이용
->gridsearch의 주요 단점 : 튜닝해야할 하이퍼 파라미터 개수가 많을 경우 최적화 수행 시간이 오래 걸림
-> xgboost나 lightgbm은 뛰어난 알고리즘이기에 정교화된 하이퍼 파라미터 튜닝이없어도 높은 모델 성능을 보여주지만 조금이라도 모델 성능을 향상시킬 경우에는 베이지안 최적화 기법이 효과적
