
분류(Classification)
→ 소속 집단의 정보를 이미 알고 있는 상태에서 데이터를 분류하는 방법
군집화(Clustering)
→ 소속 집단의 정보가 없는 상태에서 비슷한 집단으로 묶는 비지도 학습

📌 예제
✨ 붓꽃(Iris) 데이터셋 분류
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 데이터 로드
iris = load_iris()
X, y = iris.data, iris.target
# 훈련/테스트 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# k-NN 모델 학습
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# 예측 및 정확도
y_pred = knn.predict(X_test)
print("정확도:", accuracy_score(y_test, y_pred))
머신러닝 모델은 단순히 정확도(Accuracy) 만으로 평가하면 위험.
데이터가 불균형하면 정밀도(Precision), 재현율(Recall), F1 Score 같이 봐야 함.
정확도 (Accuracy)
전체 중에서 맞춘 비율
정밀도 (Precision)
양성으로 분류된 것 중 실제 양성인 비율
재현율 (Recall)
실제 양성 데이터 중 양성으로 맞춘 비율
F1 Score
정밀도와 재현율의 조화 평균
⚠️ 표집 편향(Sampling Bias):
데이터가 특정 클래스에 치우쳐 있으면 성능 왜곡 발생
✨ 혼동행렬 + 정밀도/재현율 계산
from sklearn.metrics import confusion_matrix, classification_report
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

✨ 랜덤포레스트 예제
from sklearn.cluster import KMeans
import pandas as pd
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
kmeans = KMeans(n_clusters=3, random_state=42)
iris_df['cluster'] = kmeans.fit_predict(iris.data)
print(iris_df.head())


📌 k-NN vs k-means
📌 예시 코드 (k-means 군집화)
from sklearn.cluster import KMeans
import pandas as pd
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
kmeans = KMeans(n_clusters=3, random_state=42)
iris_df['cluster'] = kmeans.fit_predict(iris.data)
print(iris_df.head())