欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 机器学习KNN算法

机器学习KNN算法

2025/4/19 9:15:43 来源:https://blog.csdn.net/zhglhy/article/details/147246058  浏览:    关键词:机器学习KNN算法

K-最近邻算法 (KNN) —— 机器学习基础

K-最近邻算法(K-Nearest Neighbors, KNN)是一种简单而强大的监督学习算法,可用于分类回归任务。它的核心思想是:相似的数据点往往具有相似的输出值


1. KNN 的核心原理

KNN 是一种基于实例的学习(Instance-Based Learning),也称为惰性学习(Lazy Learning),因为它不会在训练阶段构建显式模型,而是在预测时直接计算输入样本与训练数据的相似度。

KNN 的工作步骤

  1. 选择 K 值:确定要考虑的最近邻数量(如 K=3, 5, 10)。

  2. 计算距离:使用距离度量(如欧氏距离、曼哈顿距离)计算新样本与所有训练样本的距离。

  3. 找出 K 个最近邻:选择距离最近的 K 个训练样本。

  4. 预测结果

    • 分类任务:采用多数投票法(哪个类别最多就预测哪个)。

    • 回归任务:采用平均值(或加权平均)作为预测值。


2. KNN 的关键参数

参数说明
K 值控制邻居数量,太小容易过拟合,太大可能欠拟合。
距离度量常见的有:
欧氏距离(Euclidean):√(Σ(x_i - y_i)²)
曼哈顿距离(Manhattan):Σ|x_i - y_i|
余弦相似度(Cosine):用于文本等高维数据
权重是否让更近的邻居有更大的权重(如 加权KNN)。

3. KNN 的优缺点

✅ 优点

  • 简单直观,易于理解和实现。

  • 无需训练阶段,适合动态数据。

  • 适用于多分类问题

  • 对数据分布没有假设(非参数方法)。

❌ 缺点

  • 计算复杂度高(需要存储所有训练数据,预测时计算量大)。

  • 对噪声和异常值敏感

  • 需要特征缩放(如使用欧氏距离,不同量纲会影响结果)。

  • 高维数据表现差(“维度灾难”问题)。


4. KNN 的代码示例(Python)

使用 scikit-learn 实现 KNN:

分类任务

from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)# 训练 KNN
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)# 预测
y_pred = knn.predict(X_test)
print("Accuracy:", knn.score(X_test, y_test))

回归任务

from sklearn.neighbors import KNeighborsRegressor
from sklearn.datasets import load_diabetes# 加载数据
diabetes = load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(diabetes.data, diabetes.target, test_size=0.2)# 训练 KNN 回归
knn_reg = KNeighborsRegressor(n_neighbors=5)
knn_reg.fit(X_train, y_train)# 预测
y_pred = knn_reg.predict(X_test)
print("R2 Score:", knn_reg.score(X_test, y_test))

5. KNN 的优化方法

  • 调整 K 值(使用交叉验证选择最佳 K)。

  • 数据标准化(如 StandardScaler 或 MinMaxScaler)。

  • 降维处理(如 PCA 减少特征维度)。

  • 使用近似算法(如 KD-Tree、Ball-Tree 加速搜索)。


6. 总结

  • KNN 是一种简单但强大的算法,适用于小规模数据集。

  • 它的性能依赖于 K 值的选择、距离度量和数据预处理

  • 适用于分类和回归,但在大数据集和高维数据上效率较低。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词