글 한눈에 보기

문제 설정
사이킷런 링크: 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))