[핸즈온 머신러닝] 제 3장 정리
📗강의노트/핸즈온 머신러닝

[핸즈온 머신러닝] 제 3장 정리

728x90
반응형
3장에서는 MNIST Data를 이용한 분류를 보여주고 있다. 
70,000개의 이미지이고 각각의 이미지는 784개의 특성을 가지고 있다.(28x28)

  1. Train / Test Split ( 데이터셋 섞어서 )
  2. 모델 훈련
  3. 성능 측정 ( 교차검증 / GridSearch )
       정확도만으로는 분류기의 성능 측정 부족 ( 특히 불균형데이터 )

    4. 에러 분석
    5. 성능 개선 


  • Keyword

확률적 경사 하강법 ( Stochastic Gradient Descent, SGD ) : 큰 데이터셋을 효율적으로 처리하는 장점이 있다. SGD가 한 번에 하나씩 훈력 샘플을 독립적으로 처리하기 때문 ( 온라인 학습에 잘 맞음 )

오차 행렬( Confusion Matrix ) : 기본적인 아이디어는 클래스 A의 샘플이 클래스 B로 분류된 횟수를 세는 것. 행은 실제 클래스, 열은 예측한 클래스를 나타냄. 




      정밀도(Precision) : 양성 예측의 정확도 
          P는 진짜 양성의 수, FP는 거짓 양성의 수 
          재현율과 같이 사용하는 것이 일적
        





      재현율(Recall) : 분류기가 정확하게 감지한 양성 샘플의 비율,
           민감도(Sensitivity) 또는 진짜 양성 비율 (true positive rate : TPR)
           FN은 거짓 음성의 수



    
TP : 양성을 정확하게 분류
TN : 음성을 정확하게 분류
FP : 양성으로 잘못 분류
FN : 음성으로 잘못 분류

F1 점수 : 정밀도와 재현율의 조화 평균, 정밀도와 재현율이 비슷한 분류기에서는 F1 점수가 높다. 항상 바람직하지는 않다. 정밀도, 재현율이 중요한 때는 다르다. 



정밀도/재현율 트레이드오프 : 정밀도를 올리면 재현율이 떨어지고, 그 반대도 마찬가지이다. 재현율이 너무 낮다면 높은 정밀도의 분류기는 전혀 유용하지 않다.




SGDClassifier : 결정 함수(decision function)를 사용하여 각 샘플의 점수를 계산한다. 이 점수가 임곗값보다 크면 샘플을 양성 클래스에 할당하고 반대의 경우 음성 클래스에 할당한다. ( 결정 임곗값에 따라 정밀도, 재현율이 달라진다 ). 
임곗값이 올라간다고해서 무조건 정밀도가 상승하는 것은 아니다. 하지만 임곗값이 올라갈수록 재현율은 낮아진다. 
클래스마다 픽셀에 가중치를 할당하고, 새로운 이미지에 대해 단순히 픽셀의 강도의 가중치 합을 클래스의 점수로 계산함. 몇 개의 픽셀만 다른 3,5를 혼동할 수 있음


ROC 곡선 : 거짓 양성 비율(FPR)에 대한 진짜 양성 비율(TPR,=재현율)의 곡선이다. 진짜 음성 비율 = TNR(특이도,Specificity)
민감도(재현율)에 대한 1 - 특이도 그래프이다. 
점선은 완전한 랜덤 분류기의 ROC 곡선을 나타냄. 좋은 분류기는 이 점선으로부터 최대한 멀리 떨어져 있어야 한다. 
 -> 양성 클래스가 드물거나, 거짓 음성보다 거짓 양성이 중요할 때 ‘PR곡선’ 아니면 ROC
ROC를 그리려면 ‘확률’이 아니라 ‘점수’가 필요함 



AUC( 곡선 아래의 면적 ) : 완벽한 ROC의 AUC는 1이고, 완전한 랜덤 분류기는 0.5이다.   

일대다 전략( OvA ) : 분류기를 n개만큼 만들고, 각 분류기의 결정 점수 중에서 가장 높은 것을 클래스로 선택하면 됨. 대부분의 이진 분류에서 선호 

일대일 전략( OvO ) : 각 클래스의 조합마다 분류기를 훈련시키는 것, 클래스가 N개라면 분류기는 N! / ( k! * (n-k)! ) 가 필요함. 두 개를 뽑을 때는 N(N-1) / 2
장점으로는 각 분류기의 훈련에 전체 훈련 세트 중 구별할 두 클래스에 해당하는 샘플만 필요하다는 것.

다중 레이블 분류 : 여러 개의 이진 레이블을 출력하는 분류 시스템. A,B는 있고 C의 얼굴은 없을 때 [1,1,0]과 같이 표현.

 


  • Coding

SGDClassifier( max_iter ) : max_iter는 트레이닝 데이터를 몇 바퀴 도는가. 즉 Epoch를 말한다. 

cross_val_score( 모델, X, Y, cv= , scoring= ) : scoring을 어떻게 설정하냐에 따라 X,Y 데이터를 분류한 분류기에 대한 점수가 나온다. cv를 통해 fold 수를 정해준다.  보통은 정확도 ( scoring = ‘accuracy’ )

cross_val_predict( 모델, X,Y, cv=) : 평가점수를 반환하는 것이 아니라 각 테스트 폴드에서 얻은 예측을 반환함. 모델이 훈런하는 동안 보지 못했던 데이터에 대한 깨끗한 예측을 함.
    Method = “decision_function” : 결정 점수를 반환하도록 함 
                “predict_proba” : RFC에는 decision_function이 없어서 이를                
                                            사용. 각 샘플에 부여한 클래스별 확률을 획득
    n_jobs = -1일 경우 모든 자원 활용 ( 병렬처리 )


confusion_matrix(실제, 예측 ) : 오차 행렬을 반환함

sklearn.metrics : precision_score(실제, 예측) : 정밀도를 반환함
                            recall_score(실제, 예측) : 재현율을 반환함
                            f1_score(실제, 예측) : F1점수를 반환함
Precision, recalls, thresholds = precision_recall_curve(실제, 예측) : 가능한 모든 임곗값에 대해 정밀도와 재현율을 계산 


decision_function( ) : SGDClassifer가 분류한 각 샘플의 점수를 얻을 수 있음 

matplotlib.pyplot.plot( ) : b-- 는 blue dash를 말한다. g-는 green line    

average_precision_score( ) : PR곡선 아래의 면적을 계산해줌

fpr, tpr, thresholds = roc_curve(실제, 예측)

roc_auc_score(실제, 예측) : AUC 값 반환 

OneVsOneClassifier( 모델 ) : OvO
OneVsRestClassifier( 모델 ) : OvA

matshow( ) : confusion_matrix 시각화

np.fill_diagonal(matrix, n) : matrix의 주대각선을 n으로 채움

np.random.randint( A,B,N ) : A부터 B까지 N개( shape )

 


  • 연습문제

1. MNIST 정확도 97% 달성하기 : KNN 이용

KNN은 CPU로 학습시간이 너무 오래걸려 포기..

정확도는 

2. MNIST 왼,오른,좌,우 움직여 데이터 증식하여 정확도 측정



3. 타이타닉 데이터 도전



4. 스팸 분류기 만들기  





높은 정확도를 보인다. 

728x90
반응형