| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 机器学习之KNN算法原理 -> 正文阅读 |
|
[人工智能]机器学习之KNN算法原理 |
机器学习之KNN算法原理1 KNN算法简介KNN(K近邻) 作为最基本一种机器学习算法,其使用连续值特征。算法思想的有效性使得它能够用于分类,回归,降维,矩阵分解,聚类,异常值检测等等,其中既有监督,也有无监督算法。而我们将只从分类算法展开,理解 KNN 的具体实现过程即可。 2 算法思想KNN 的算法思想是给定预测数据,在固定数据集空间中找到与它最相邻(相似)的K个数据,最后使用多数表决法决定预测数据的类别。作为一个懒惰学习算法(Lazy learning),其本身并没有损失函数与相关参数。 3 多种距离度量公式虽然 KNN 可选择距离公式有很多,但是只需知道几种比较重要的即可。 ① 欧氏距离(Euclidean distance)欧式距离应该是最简单,最常用的距离公式了,公式为 ② 曼哈顿距离(Manhattan distance)曼哈顿距离使用的则是绝对值距离,公式为
③ 闵式距离(Minkowski distance)闵式距离又称闵可夫斯基距离,它可以看作是差值向量的
α
?
N
o
r
m
\alpha-Norm
α?Norm ( 先前介绍的曼哈顿距离与欧氏距离则分别是特殊的
1
?
N
o
r
m
1-Norm
1?Norm 与
2
?
N
o
r
m
2-Norm
2?Norm ),其中
α
\alpha
α 为大于
0
0
0 的常数,公式有 ④ 标准化欧氏距离(Standardized Ed)标准化欧式距离是针对传统距离公式无法解决各个特征维度之间的分布不同。就像由于特征之间数级尺度不同,进行梯度下降法之前要先对数据进行归一化。如果我们提前进行标准化,也能解决这个问题,而标准欧氏距离则可以通过更改内部公式,加入方差的倒数项
s
i
s_i
si? 来解决。公式为 ⑤ 余弦距离(Cosine distance)这里为了方便余弦距离公式的书写,其中
P
P
P 代表的是单个预测数据的行向量,
X
i
X^i
Xi 代表的是数据集中第
i
i
i 个数据的列向量。公式有 ⑥ 切比雪夫距离(Chebyshev distance)切比雪夫距离是寻求所有特征中差值绝对值最大的那一个,公式为 4 三种算法实现① Brute(蛮力)Brute指的就是穷尽搜索,对于KNN算法,对每一个预测实力都会把所有的数据计算一遍,然后排序,取得自己想要的那 K K K 个最相近点,最后投票表决。对于单个实例,算法预测的时间复杂度为 O ( n ) O(n) O(n)。 ② KD-TreeKD树(K-Dimension-Tree)作为一个经典的树模型,通过建立类似二叉排序树减少算法搜索时间。 第一步建立树模型,分别计算所有特征的方差,然后找到其中最大的方差所对应的特征作为分割特征,分割依据是其选择中位节点作为根节点,小于该中位节点的数据分入左子树,大于该中位节点的分入右子树。最后递归生成,直到某个节点无法再分出两个子节点为止。 下面以数据 [ ( 7 , 2 ) , ( 5 , 4 ) , ( 9 , 6 ) , ( 4 , 7 ) , ( 8 , 1 ) , ( 2 , 3 ) ] [(7, 2), (5, 4), (9, 6), (4, 7), (8, 1), (2, 3)] [(7,2),(5,4),(9,6),(4,7),(8,1),(2,3)]为例构建KD树
第二步则是搜索K邻近点。有幸在著名论坛 stackoverflow 中找到了一篇详细解释 KD-tree 的文章,重点在 page 3,附上文章链接book introduce 它的思想是自上而下在递归寻找到预测数据的位置的同时更新最近邻点(小于等于走左边,大于走右边),当达到叶节点时,算作更新结束。此时得到最近邻点,以它与预测点的距离D做超球体,如果超球体相交了分类的超平面,那么就更新当前最近邻点在其另一个子节点的位置;如果超球体不相交,那么就不跟新找到的最近邻点。最后标记该最近邻点,在寻找次最近邻点时忽略它的存在。 我们寻找预测点(2,4.5)的最近邻点为例
③ Ball-Tree当特征数量十分多时,KD-Tree会出现沿着笛卡尔搜索数据效率低下的问题。为此出现了基于KD-Tree改进的Ball-Tree,但是其在构建球树时花费的时间会远大于KD-Tree。总的来说,Ball-Tree在高维度特征下预测时比KD-Tree更有效,但构建时间也更长。 第一步,球树的构建流程
给出一张已划分球树的图加强理解 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 20:43:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |