9.기본 지도학습 알고리즘들(KNN)
글 한눈에 보기
문제 설정
사이킷런 링크: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html 클래스 수: 3개. 샘플 수: 총 178개 (class_...
원본 구조
원본 마크다운의 큰 섹션 흐름을 기준으로 이 실습을 다시 읽을 수 있게 정리했습니다.
데이터 맥락
사이킷런 링크: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html 클래스 수: 3개 - 샘플 수: 총 178개 (class_...
주요 장
평가 지표 해석 · 전처리와 입력 정리 · 분류 문제
구현 흐름
데이터셋 불러오기 -> GridSearchCV 모델 학습 -> 분류 성능 평가
자료
ipynb / md · 코드 13 · 실행 13
주요 스택
sklearn
사이킷런 링크: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html
- 클래스 수: 3개
- 샘플 수: 총 178개 (class_0: 59, class_1: 71, class_2: 48)
- 피처 수: 13개 (연속형, 모두 양수)
- 출처: UCI 머신러닝 저장소의 Wine 데이터셋 (값 일부 포맷화됨)
| 피처 이름 | 설명 |
|---|---|
| alcohol | 알코올 함량 |
| malic_acid | 말산 함량 |
| ash | 회분 함량 |
| alcalinity_of_ash | 회분의 알칼리도 |
| magnesium | 마그네슘 함량 |
| total_phenols | 총 페놀 |
| flavanoids | 플라바노이드 |
| nonflavanoid_phenols | 비플라바노이드 페놀 |
| proanthocyanins | 프로안토시아니딘 |
| color_intensity | 색 농도 |
| hue | 색조 |
| od280/od315_of_diluted_wines | 희석 와인의 OD280/OD315 |
| proline | 프롤린 |
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, classification_report
wine = load_wine()
X, y = wine.data, wine.target
target_names = wine.target_names
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 표준화
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.fit_transform(X_test)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train_scaled, y_train)
y_pred = knn.predict(X_test_scaled)
accuracy_score(y_test, y_pred)
print(classification_report(y_test, y_pred, target_names=target_names))
from sklearn.model_selection import GridSearchCV
param_grid = {'n_neighbors': range(1, 31)}
grid = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5)
grid.fit(X_train_scaled, y_train)
best_k = grid.best_params_['n_neighbors']
best_k
# 최적의 K값으로 학습 및 평가
best_model = grid.best_estimator_
y_pred_best = best_model.predict(X_test_scaled)
accuracy_score(y_test, y_pred_best)
print(classification_report(y_test, y_pred_best, target_names=target_names))