通常选择奇数K避免平票,常用K=3,5,7。可通过交叉验证选择最优K值。
7.6 K近邻算法 (KNN)
最简单直观的分类算法
🎯 学习目标
- 理解KNN的工作原理
- 学会选择合适的K值
- 掌握距离度量方法
- 了解KNN的优缺点
📐 KNN原理
物以类聚
找到距离最近的K个邻居,通过投票决定类别
1
计算距离
2
找K个邻居
3
投票决策
💻 sklearn实现
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
# 标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# KNN分类器
knn = KNeighborsClassifier(
n_neighbors=5, # K值
weights='uniform', # 权重: 'uniform' 或 'distance'
metric='minkowski', # 距离度量
p=2 # p=2为欧氏距离
)
# 训练(实际是存储数据)
knn.fit(X_train_scaled, y_train)
# 预测
y_pred = knn.predict(X_test_scaled)
y_proba = knn.predict_proba(X_test_scaled)
📊 K值选择
K太小
容易过拟合,对噪声敏感
不推荐K适中
平衡偏差和方差
推荐K太大
容易欠拟合,决策边界太平滑
不推荐
💡
📝 本节小结
✅
- • KNN是惰性学习,不需要训练
- • 预测时计算量大,适合小数据集
- • K值选择很关键
- • 数据必须标准化