【Python】KNN:K-NearestNeighbor 学习指南
【Python】KNN:k-NearestNeighbor 学习指南
- 一、基本原理
- 1.原理简述:
- 2.适用范围:
- 二、KNN的优缺点分析
- 1.优点:
- 2.缺点:
- 三、实现原理
- 四、总结
一、基本原理
KNN是机器学习分类技术中最简单方法之一,属于监督学习范畴。
K最近邻,就是k个最近的邻居的意思,即每个样本都可以用它最接近的k个邻居来代表。因此KNN算法的结果很大程度取决于K的选择。
1.原理简述:
(1) 计算测试数据与各个训练数据之间的距离
(2) 按照距离的递增关系进行排序
(3) 选取距离最小的K个点
(4) 确定前K个点所在类别的出现频率
(5) 返回前K个点中出现频率最高的类别作为测试数据的预测分类
2.适用范围:
由于KNN方法主要靠周围有限邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合.
二、KNN的优缺点分析
1.优点:
- 无需估计参数,无需训练
- 适合对稀有事件进行分类
- 适合多分类问题(对象具有多个类别标签),比SVM的表现要好
2.缺点:
- K难确定,该算法只计算’最近的’邻居样本。某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本
- 计算量和复杂度高,因为对每一个待分类的文本都要计算距离
- 可理解性差,无法给出像决策树那样的规则
三、实现原理
# 导入库
from sklearn.datasets import load_iris # 用于加载鸢尾花数据集
from sklearn.neighbors import KNeighborsClassifier # K近邻分类算法实现模块
from sklearn.model_selection import train_test_split # 数据集划分工具(用于拆分训练集/测试集)
from sklearn.preprocessing import StandardScaler # 数据标准化处理器(消除特征量纲差异)
from sklearn.metrics import accuracy_score # 准确率计算函数(模型性能评估)
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 数据预处理(标准化)
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# 创建模型(K=5,使用曼哈顿距离)
knn = KNeighborsClassifier(n_neighbors=5, metric='manhattan')
knn.fit(X_train, y_train)
# 预测并评估
y_pred = knn.predict(X_test)
print(f"准确率:{accuracy_score(y_test, y_pred):.2%}")
四、总结
- 参数调优:通过交叉验证选择最优K值(参考误差率曲线)
- 距离度量对比:欧氏距离 vs 余弦相似度(文本分类场景更适用后者)
- 工程优化:使用KD树将时间复杂度从O(n)降至O(log n)