일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 객체지향 프로그래밍
- IoC
- 인스턴스
- API
- 스레드
- 항해99솔직후기
- inversion of control
- 항해99단점
- 쓰레드
- 항해99장점
- bean
- social login
- jwt
- process
- 회고록
- 인스턴스화
- Dependency Injection
- Instance
- object
- 객체
- 소셜
- jvm
- 클래스
- class
- Thread
- 오브젝트
- 프로세스
- 소셜로그인
- 부트캠프추천
- DI
- Today
- Total
로운's 기술노트
[기초학습반] Python Challenge_5회차 본문
■ 분류 (Classification)
□ MNIST
- 고등학생과 미국 인구조사국 직원들이 손으로 쓴 숫자 이미지 데이터(머신러닝 분야의 hello world)
- 사이킷런 데이터들은 대부분 딕셔너리 형태
- DESCR : 데이터셋 설명
- data : 행열로 이루어진 데이터
- target : 정답값(문자로 출력되기 때문에 정수값으로 변환 필요)
ㅇData 구성
- 70,000개의 이미지 (앞 60,000개는 train data, 잔여 10,000개는 test data)
- 각 이미지에는 784개의 특성이 있음(28*28픽셀)
- 각각의 특성이 0~255의 값을 가질 수 있음
ㅇ 'X'와 'y'로 기재하는 이유?
# X = mnist["data"]
# y = mnist["target"]
X는 매트릭스(행렬)고, y는 벡터(단일행)라서!
ㅇ이진 분류기
- 이미지가 5인지 아닌지로 분류!
- SGDClassifier를 이용하여 학습진행
* SGDClassifier : SVM이라는 머신러닝을 확률적 경사하강법으로 학습하는 모델 (배치경사하강법은 시간이 오래걸리기 때문에 실무에서 거의 사용하지 않음)
* SVM(Support Vector Machine)이란? 분류할 때 정말 많이 쓰이는 모델. 다목적 모델(분류, 비선형분류, 리그레이션 가능)
- 대용량 데이터 학습시 유리함
ㅇ 성능측정
- 성능평가는 회귀보다 분류가 훨씬 어려움!
- 정확도 성능이 95~96%로 나왔지만 100% 신뢰할 수 있을까? 정답은 No!
* 정확도란, 전체 데이터 개수 중 맞춘 데이터 개수 비율
> 고르게 분포되지 않은(불균형한) 데이터를 이진분류할 경우 이러한 맹점이 발생.(e.g. 5가 아니라는 알고리즘만 있어도 90%에 육박)
>>accuracy 믿지말자! 쓰지마 (정확도가 분류기의 성능측정 지표로 선호되지 않는 이유)
ㅇ 오차행렬 (혼동행렬, confusion matrix)
.Predicted : 예측 값
.Actual : 실제 값
.nagaticve : 5가 아닌 경우
.positive : 5인 경우
ㅇ 정밀도와 재현율
- 오차행렬을 요약한 지표가 정밀도(precision) 재현율(recall/ '민감도(sensitivity)'로 부르기도 함)
# precision
# sklearn 계산
from sklearn.metrics import precision_score, recall_score
precision_score(y_train_5, y_train_pred)
# confusion matrix로 precision 직접 계산
cm = confusion_matrix(y_train_5, y_train_pred)
cm[1, 1] / (cm[0, 1] + cm[1, 1])
- 위 2가지(정밀도와 재현율)의 조화평균으로 계산한 것이 f1_score (한쪽으로 치우치지 않고 전체적인 성능 확인 가능)
# recall
# 1. sklearn계산
recall_score(y_train_5, y_train_pred)
# 2. confusion matrix로 recall 직접계산
cm[1, 1] / (cm[1, 0] + cm[1, 1])
ㅇ 오차행렬(confusion_matrix)로 머신러닝의 어떤 정확도도 파악 가능!
(표를 외울 필요는 없지만 이런게 있다는 건 꼭 기억하자!)
ㅇ 서비스(or상황이나 경우)에 따라 precision, recall 사용
의료데이터는 recall을 더 중요하게 여김 (e.g. 암이 아니라고 예측했는데, 암으로 판정 > Critical함)
> 하나만 알려주려면 F1스코어(리콜과 프리시전)를 쓰자. (한번에 3가지 다 병행하는 것도 방법!)
ㅇ 다중분류
- SVM이나 로시스틱 회귀는 이진분류 밖에 안된다. but, 다중 분류를 수행하려면?
> 여러 번 수행하면 된다! 어떻게? OvR 또는 OvO!
- OvR (One versus Rest)
첫 번째 분류기: 클래스 A와 클래스 B, C를 구분 (A vs Rest)
두 번째 분류기: 클래스 B와 클래스 A, C를 구분 (B vs Rest)
세 번째 분류기: 클래스 C와 클래스 A, B를 구분 (C vs Rest)
- OvO (One versus One)
첫 번째 분류기: 클래스 A와 클래스 B를 구분 (A vs B)
두 번째 분류기: 클래스 A와 클래스 C를 구분 (A vs C)
세 번째 분류기: 클래스 B와 클래스 C를 구분 (B vs C)
-대부분의 이진분류에서는 OvR을 사용하여 훈련함
- SVM은 OvO를 선호
- sklearn svm은 기본적으로 OvR내장하고 있으며, decision_function_shape을 이용해 OVO 사용가능
'내배캠_데이터분석가_'24.04~08 > 파이썬' 카테고리의 다른 글
Jupyter 노트북 단축키 (0) | 2024.06.21 |
---|---|
딥러닝을 위한 GPU 세팅 (Window 기준) (0) | 2024.06.20 |
[프로그래머스] x만큼 간격이 있는 n개의 숫자 (0) | 2024.06.01 |
[문법] Pandas2 (10 minutes to pandas) (0) | 2024.05.14 |
[문법] Pandas (외부 라이브러리) (0) | 2024.05.06 |