[OUTTA Alpha팀 Medical AI& 3D Vision 스터디] 기초 및 심화 머신러닝 2(Classification)
YeonJuJeon2024. 12. 29. 20:11
1. Logistic Regression (로지스틱 회귀)
개념:
이진 분류에 사용되는 통계 기반 머신러닝 모델.
독립 변수의 선형 결합을 사용하여 사건 발생 확률을 예측.
클래스가 2개 이상일 경우 OvR(One-vs-Rest) 또는 OvO(One-vs-One) 전략을 사용.
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 모델 선언 및 학습
model = LogisticRegression(random_state=0)
model.fit(x_train, y_train)
# 예측 및 평가
pred = model.predict(x_valid)
print("정확도:", accuracy_score(y_valid, pred))
문법:
shuffle=True (기본값): 데이터를 무작위로 섞은 뒤 분할.
stratify: target의 클래스 비율을 유지하여 데이터를 분할.
ex) target의 클래스가 [50%, 30%, 20%]라면, 훈련/검증 세트에서도 동일 비율로 유지.
from sklearn.linear_model import SGDClassifier
# 모델 선언 및 학습
sgd = SGDClassifier(random_state=0)
sgd.fit(x_train, y_train)
# 예측 및 평가
pred = sgd.predict(x_valid)
print("정확도:", (pred == y_valid).mean())
3. 하이퍼파라미터
정의:
파라미터: 모델 내부에서 학습으로 결정되는 값 (ex: 선형 회귀의 계수).
하이퍼파라미터: 사용자가 설정해야 하는 값 (ex: learning rate, regularization).
예제 하이퍼파라미터
random_state: 재현성을 보장.
n_jobs: CPU 사용 코어 수 (-1은 모든 코어 사용).
4. KNeighborsClassifier (KNN)
개념:
최근접 이웃 알고리즘: 새로운 데이터가 가장 가까운 K개의 데이터와 같은 클래스로 분류.
거리 계산에 유클리디안 거리 사용.
from sklearn.neighbors import KNeighborsClassifier
# 모델 선언 및 학습
knn = KNeighborsClassifier()
knn.fit(x_train, y_train)
# 예측 및 평가
pred = knn.predict(x_valid)
print("정확도:", (pred == y_valid).mean())
5. Support Vector Classification (SVC)
개념:
결정 경계를 사용하여 데이터를 분류.
이진 분류에 강점이 있으며 OvR 전략을 사용하여 다중 클래스 분류 가능.
from sklearn.svm import SVC
# 모델 선언 및 학습
svc = SVC(random_state=0)
svc.fit(x_train, y_train)
# 예측 및 평가
pred = svc.predict(x_valid)
print("정확도:", (pred == y_valid).mean())
6. Decision Tree (의사 결정 나무)
개념:
데이터를 트리 구조로 분할하여 분류.
Gini 계수나 엔트로피를 사용해 분할 기준 결정.
from sklearn.tree import DecisionTreeClassifier
# 모델 선언 및 학습
dtc = DecisionTreeClassifier(random_state=0)
dtc.fit(x_train, y_train)
# 예측 및 평가
pred = dtc.predict(x_valid)
print("정확도:", (pred == y_valid).mean())
7. 오차와 평가 지표
7.1 오차 행렬 (Confusion Matrix)
개념:
예측 결과와 실제 데이터를 비교하여 TP, FP, FN, TN을 도출.
TP: True Positive (정확히 양성 예측).
FP: False Positive (잘못된 양성 예측).
FN: False Negative (잘못된 음성 예측).
TN: True Negative (정확히 음성 예측).
from sklearn.metrics import confusion_matrix # sklearn.metrics 안에 있음.
import seaborn as sns
import matplotlib.pyplot as plt
# 오차 행렬 시각화
cm = confusion_matrix(y_test, pred)
sns.heatmap(cm, annot=True, cmap="Reds")
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.show()
7.2 정밀도 (Precision)
정의:
양성으로 예측한 값 중 실제 양성의 비율.
무조건 양성으로 판단하면 좋은 정밀도를 얻기 때문에 유용하지는 않음.
$$\text{Precision} = \frac{TP}{TP + FP}$$
from sklearn.metrics import precision_score
precision = precision_score(y_test, pred)
print("정밀도:", precision)
7.3 재현율 (Recall)
정의:
실제 양성 데이터 중 정확히 양성으로 예측한 비율.
정확하게 감지한 양성 샘플의 비율.
$$\text{Recall} = \frac{TP}{TP + FN}$$
from sklearn.metrics import recall_score
recall = recall_score(y_test, pred)
print("재현율:", recall)