首页/文章/ 详情

大学课程 数据分析 实战之KNN算法(2)

1月前浏览303

继续讲解!KNN 是一种简单的分类算法,其核心思想是通过计算待分类样本与训练样本的距离,找到距离最近的 K 个样本,然后根据这 K 个样本的类别进行投票,决定待分类样本的类别。之前看了KNN算法的仿真程序,该程序用的是欧式距离进行分类判决的标准,还能用其他距离进行度量分类吗?比如使用曼哈顿距离、余弦相似度这两个距离度量方法。本文下半部分给出了相关的算法程序,并进行性能比较。先来看看这几种距离度量方法的差异!

曼哈顿距离、余弦相似度和欧式距离也是常见的距离度量方法,在分类算法中有不同的应用场景和效果。它们的差异可以从以下几个方面进行比较:

  • 适用场景

    • 曼哈顿距离:适合于问题中每个维度的差异需要平等处理,且数据中的各个维度具有相同的权重时,例如一些离散数据或交通网络问题。

    • 余弦相似度:常用于文本数据分析、推荐系统等领域,尤其适合当关注的是向量的方向而非大小时。适用于高维稀疏数据,例如TF-IDF特征向量。

    • 欧式距离:广泛应用于几何空间中的点间距离计算,适用于各个维度具有相同的度量单位,并且数据点之间的绝对差异对分类任务有影响时。

  • 敏感性差异

    • 曼哈顿距离:对数据的尺度变化较为敏感。如果数据的某个维度变化较大,曼哈顿距离会倾向于该维度,从而导致对某些维度的过度强调。

    • 余弦相似度:不受数据大小的影响,只考虑数据间的相对方向,常用于文本分析中,不关注数据的绝对大小。

    • 欧式距离:对数据的尺度变化非常敏感,尺度不同的特征可能影响最终的分类结果。

  • 计算复杂度

    • 曼哈顿距离欧式距离的计算复杂度基本相同,都是O(n)(n为特征维度的数量),因为它们直接对每个维度进行处理。

    • 余弦相似度需要计算向量的点积和模长,计算过程稍复杂,但对稀疏数据更有效。

看一下使用曼哈顿距离进行分类的程序示例!

% 生成测试数据
[X_test1, X_test2] = meshgrid(linspace(0, 4, 100), linspace(0, 4, 100));
X_test = [X_test1(:), X_test2(:)];
% 设定 K 值
K = 5; 
% 计算测试点分类结果
y_pred = knn_predict(X_train, y_train, X_test, K);
% 自编函数
% 绘制决策边界
figure; hold on;
gscatter(X_test(:,1), X_test(:,2), y_pred, [0.8 0.8 1; 1 0.8 0.8], '.', 1);


来源:通信工程师专辑
科普
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-02-19
最近编辑:1月前
算法工匠
博士后 | 高级工程师 诚信做事 认真讲课 传播知识
获赞 408粉丝 2663文章 436课程 40
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈