欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 机器学习(4)—— K近邻算法

机器学习(4)—— K近邻算法

2025/4/19 8:22:52 来源:https://blog.csdn.net/jiaomongjun/article/details/147165863  浏览:    关键词:机器学习(4)—— K近邻算法

文章目录

  • 1. K近邻算法(K-Nearest Neighbors, KNN)原理
    • 1.1. K近邻算法是什么算法?
    • 1.2. 核心思想
  • 2. K近邻算法的步骤
    • 2.1. 选择K值
    • 2.2. 计算距离
    • 2.3. 选择最近邻:
    • 2.4. 做出预测:
  • 3. K值的选择
  • 4. 数据标准化
  • 5. 优缺点
  • 6. 样例代码
  • 7。优化技巧
  • 8. 归纳

1. K近邻算法(K-Nearest Neighbors, KNN)原理

1.1. K近邻算法是什么算法?

K近邻(KNN)是一种惰性学习(Lazy Learning) 算法,适用于分类回归任务。其核心思想是:“相似的样本在特征空间中距离相近”,通过计算待预测样本与训练样本的距离,找到最近的K个邻居,基于这些邻居的标签进行预测。

1.2. 核心思想

给定一个待分类(或回归)的数据点,找到训练集中距离该数据点最近的K个邻居,然后通过这些邻居的标签(分类问题)或数值(回归问题)来预测该数据点的标签或数值。

  • 分类任务:待预测样本的类别由其K个最近邻居的**多数投票(Majority Voting)**决定。

  • 回归任务:待预测样本的值由其K个最近邻居的平均值决定。

  • 关键参数

    • K值:选择最近的K个邻居(影响模型复杂度)。

    • 距离度量:计算样本间距离的方法(如欧氏距离、曼哈顿距离)。

2. K近邻算法的步骤

2.1. 选择K值

  • 选择K个最近邻居。通常K是一个小的整数,常见的选择有1、3、5等。

2.2. 计算距离

计算待分类点与所有训练集点之间的距离,常用的距离度量包括欧几里得距离、曼哈顿距离等。

常用距离公式:

  • 欧氏距离(Euclidean Distance): d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x, y) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2} d(x,y)=i=1n(xiyi)2
    -其中 x = ( x 1 , x 2 , . . . , x n ) x=(x_1,x_2,...,x_n) x=(x1,x2,...,xn) y = ( y 1 , y 2 , . . . , x n ) y=(y_1,y_2,...,x_n) y=(y1,y2,...,xn) 是两个数据点

  • 曼哈顿距离(Manhattan Distance): d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x, y) = \sum_{i=1}^{n} |x_i - y_i| d(x,y)=i=1nxiyi

  • 余弦相似度(Cosine Similarity)(适用于高维稀疏数据): cos ⁡ ( θ ) = x ⋅ y ∥ x ∥ ⋅ ∥ y ∥ \cos(\theta) = \frac{x \cdot y}{\|x\| \cdot \|y\|} cos(θ)=xyxy

2.3. 选择最近邻:

  • 根据距离,选择距离待分类点最近的K个邻居。

2.4. 做出预测:

  • 分类:如果是分类问题,则返回K个邻居中最多的类别。
  • 回归:如果是回归问题,则返回K个邻居的平均值或中位数。
    返回预测结果。

3. K值的选择

  • K太小(如K=1):

    • 模型复杂,容易过拟合(对噪声敏感)。
    • 决策边界不规则。
  • K太大(如K=N):

    • 模型简单,可能欠拟合(忽略局部特征)。

    • 决策边界趋于平滑。

  • 优化方法:

    • 使用交叉验证(Cross-Validation)选择最佳K值。

4. 数据标准化

由于KNN依赖距离计算,不同特征量纲差异会导致某些特征主导距离计算。因此,需进行标准化:

  • Min-Max归一化: x ′ = m a x ( X ) − m i n ( X ) x − m i n ( X ) x^′ = \frac{max(X)−min(X)}{x−min(X)} x=xmin(X)max(X)min(X)
  • Z-Score标准化: x ′ = x − μ σ x^′=\frac{x−μ}{σ} x=σxμ

5. 优缺点

  • ✅ 优点

    • 简单直观,易于实现。
    • 无需训练(惰性学习,仅存储数据)。
    • 适用于多分类和回归问题。
    • 对数据分布无假设(非参数方法)。
  • ❌ 缺点

    • 计算复杂度高(预测时需计算所有样本距离)。
    • 对高维数据效果差(维度灾难,Curse of Dimensionality)。
    • 对异常值和噪声敏感。
    • 需要特征标准化。
    • 选择K值困难(K值过小容易过拟合,K值过大可能导致欠拟合。)

6. 样例代码

# 导入必要的库
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
import matplotlib.pyplot as plt# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建K近邻分类器,选择K=3
knn = KNeighborsClassifier(n_neighbors=3)# 训练K近邻模型
knn.fit(X_train, y_train)# 预测测试集
y_pred = knn.predict(X_test)# 输出准确率
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")

7。优化技巧

  • 调整K值:用网格搜索(GridSearchCV)选择最佳K。

  • 加权投票:近邻的投票可按距离加权(如weights=‘distance’)。

  • 降维:对高维数据先用PCA降维。

  • 近似最近邻(ANN):用KD-Tree、Ball-Tree或HNSW加速搜索(适合大规模数据)。

8. 归纳

  • KNN的核心:基于邻居的投票或平均进行预测。

  • 关键参数:

    • K值(控制模型复杂度)。

    • 距离度量(欧氏/曼哈顿/余弦)。

  • 适用场景:

    • 小规模、低维数据。

    • 需要快速原型验证的分类/回归问题。

版权声明:

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

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

热搜词