분류 알고리즘 (Classification)
설명변수를 바탕으로 목표 변수가 가질 수 있는 여러 범주 중 하나를 예측하는 지도학습의 대표적인 방법
핵심 개념: 주변의 '가까운' 데이터를 기준으로 분류
방식:
특징
# 속성 변수 선택
X = ndf[['pclass','age','sibsp','parch','female','male','town_C','town_Q','town_S']] # 설명변수 X
y = ndf[['survived']] # 예측 변수 y
# 데이터 전처리 도구들을 모아둔 모듈 preprocessing을 불러옴
# StandardScaler: 표준화(standardization)를 수행하는 도구
# 왜 표준화를 할까? K-Means, SVM, KNN, PCA 같은 알고리즘은 거리 기반 계산을 하기 때문에, 특성들의 스케일이 다르면 성능이 나빠질 수 있음
# fit(X): X의 평균과 표준편차를 계산
# transform(X): 위 통계를 사용해서 실제로 데이터를 변환
from sklearn import preprocessing
X = preprocessing.StandardScaler().fit(X).transform(X)
# train data와 test data를 7:3으로 구분
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=10)
print('train data 개수:', X_train.shape)
print('test data 개수:', X_test.shape)
# sklearn 라이브러리에서 KNN 분류 모형 가져오기
from sklearn.neighbors import KNeighborsClassifier
# 모형 객체 생성 (k=5로 설정)
# 가장 가까운 이웃 5개를 사용하겠다. 보통 k는 홀수로 지정. 짝수로 지정할 경우 동점이 될 수 있음
knn = KNeighborsClassifier(n_neighbors=5)
# train data를 가지고 모형 학습
knn.fit(X_train, y_train)
# test data를 가지고 y_hat 예측(분류)
y_hat = knn.predict(X_test) # y_hat: 예측된 값
print(y_hat[0:10]) # 예측된 값 10개
print(y_test.values[0:10]) # 실제 정답 10개
# 모형 성능 평가 - Confusion Matrix 계산
from sklearn import metrics
knn_matrix = metrics.confusion_matrix(y_test, y_hat)
print(knn_matrix)
# Confusion Matrix 시각화
# annot=True: 각 셀에 숫자값(정수)을 표시
# fmt='d': 포맷 정수로 입력
plt.figure(figsize=(8, 6))
sns.heatmap(knn_matrix, annot=True, fmt='d', cmap='Blues',
xticklabels=['Negative', 'Positive'],
yticklabels=['Negative', 'Positive'])
plt.title('Confusion Matrix')
plt.ylabel('Actual label')
plt.xlabel('Predicted label')
plt.show()
# 모형 성능 평가 - 평가지표 계산
knn_report = metrics.classification_report(y_test,y_hat)
print(knn_report)


핵심 개념: 클래스 간 최대한 margin을 가능한 한 넓게 벌려서 데이터를 나누는 방법 -> Test data가 그 경계선의 어느 쪽에 있는지 분류하는 알고리즘
방식
특징


핵심 개념: 데이터 특징을 기준으로 질문을 반복하며 나무 구조로 분기
방식
특징
# 특성 중요도 계산
features = pd.DataFrame(tree_model.feature_importances_,
index=train_features,
columns=['Importance'])
features = features.sort_values(by='Importance', ascending=False)
features

Confusion Matrix와 모델 성능 평가

False Positive (FP) = 24: 실제로는 Negative인데 Positive로 잘못 예측 -> 잘못된 경고/오탐
False Negative (FN) = 26: 실제로는 Positive인데 Negative로 잘못 예측 -> 놓친 탐지/누락

📌 Precision (정밀도)
양성이라고 예측한 것 중 실제로 양성인 비율
클래스 0: 0.79 → 예측한 Negative 중 79%가 실제로 Negative
클래스 1: 0.70 → 예측한 Positive 중 70%가 실제로 Positive
📌 Recall (재현율)
실제 양성 중에서 모델이 양성으로 잘 맞춘 비율
클래스 0: 0.80 → 실제 Negative 중 80%를 정확히 Negative로 예측
클래스 1: 0.68 → 실제 Positive 중 68%만을 Positive로 예측 (False Negative 존재)
FN 비용이 큰 문제라면 → Recall 향상 필요
FP 비용이 큰 문제라면 → Precision 향상 필요