Programming/AI & ML

[OUTTA Alpha팀 Medical AI& 3D Vision 스터디] 기초 및 심화 머신러닝 2(Classification)

YeonJuJeon 2024. 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%]라면, 훈련/검증 세트에서도 동일 비율로 유지.
    • drop('target', axis=1): DataFrame에서 target 열(label)을 제거.
    • axis=1: 열(column) 제거를 지정.
    • axis=0: 행(row) 제거를 지정.
x_train, x_valid, y_train, y_valid = train_test_split(
    df_iris.drop('target', axis=1), df_iris['target']
)

2. SGDClassifier (확률적 경사 하강법)

  • 개념:
    • 확률적 경사 하강법(SGD)을 사용하여 선형 분류기를 학습.
    • 대규모 데이터셋에서도 빠르게 학습 가능.
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)

7.4 F1 스코어

  • 정의:
    • 정밀도와 재현율의 조화 평균.
    $$F1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}$$
from sklearn.metrics import f1_score

f1 = f1_score(y_test, pred)
print("F1 스코어:", f1)

8. 정확도 함정

  • 문제점:
    • 데이터 불균형이 있을 경우, 정확도만으로 모델의 성능을 판단하기 어렵다.
    • 예: 전체 데이터가 99% 음성인 경우, 모든 예측을 음성으로 하면 높은 정확도를 가짐.

해결 방법

  • 오차 행렬정밀도/재현율/F1 스코어 활용.

주요 포인트

  1. Logistic Regression: 이진 분류 기본 모델.
  2. SGDClassifier: 확률적 경사 하강법 기반.
  3. KNN: 최근접 이웃 기반 분류.
  4. SVC: 경계 기반 분류.
  5. Decision Tree: 트리 구조로 데이터 분할.
  6. 평가 지표:
    • 정확도(Accuracy): 단순히 맞춘 비율.
    • 정밀도(Precision): 양성 예측의 정확성.
    • 재현율(Recall): 실제 양성 검출 비율.
    • F1 스코어: 정밀도와 재현율의 균형.