① 常见的监督学习算法
一. K-近邻算法(k-Nearest Neighbors,KNN)
K-近邻是一种分类算法,其思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
二、决策树(Decision Trees)
决策树是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。
使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。
三、朴素贝叶斯(Naive Bayesian)
贝叶斯分类是一系列分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。朴素贝叶斯算法(Naive Bayesian) 是其中应用最为广泛的分类算法之一。朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。
四、逻辑回归(Logistic Regression)
线性回归就是根据已知数据集求一线性悔携函数,使其尽可能拟合数据,让损失函数最小,常用的拿棚线性碧敏伏回归最优法有最小二乘法和梯度下降法。而逻辑回归是一种非线性回归模型,相比于线性回归,它多了一个sigmoid函数(或称为Logistic函数)。
五、AdaBoost
AdaBoost目的就是从训练数据中学习一系列的弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。AdaBoost有一个很突出的特点就是精度很高。
六、神经网络
神经网络从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。
② KNN算法-4-算法优化-KD树
KNN算法的重要步骤是对所有的实例点进行快速k近邻搜索。如果采用线性扫描(linear scan),要计算输入点与每一个点的距离,时间复杂度非常高。因此在查询操作时,可以使用kd树对查询操作进行优化。
Kd-树是K-dimension tree的缩写,是对数据点在k维空间(如二维(x,y),三维(x,y,z),k维(x1,y,z..))中划分的一种数据结构,主要应用于多维空间关键数据的搜索(如:范围搜索和最近邻搜索)。本质上说,Kd-树就是一种平衡二叉树。
k-d tree是每个节点均为k维样本点的二叉树,其上的每个样本点代表一个超平面,该超平面垂直于当前划分维度的坐标轴,并在该维度上将空间划分为两部分,一部分在其左子树,另一部分在其右子树。即若当前节点的划分维度为d,其左子树上所有点在d维的坐标值均小于当前值,右子树上所有点在d维的坐标值均大于等于当前值,本定义对其任意子节点均成立。
必须搞清楚的是,k-d树是一种空间划分树,说白了,就是把整个空间划分为特定的几个部分,然后在特定空间的部分内进行相关搜索操作。想象一个三维(多维有点为难你的想象力了)空间,kd树按照一定的划分规则把这个三维空间划分了多个空间,如下图所示:
首先,边框为红色的竖直平面将整个空间划分为两部分,此两部分又分别被边框为绿色的水平平面划分为上下两部分。最后此4个子空间又分别被边框为蓝色的竖直平面分割为两部分,变为8个子空间,此8个子空间即为叶子节点。
常规的k-d tree的构建过程为:
对于构建过程,有两个优化点:
例子:采用常规的构建方式,以二维平面点(x,y)的集合(2,3),(5,4),(9,6),(4,7),(8,1),(7,2) 为例结合下图来说明k-d tree的构建过程:
如上算法所述,kd树的构建是一个递归过程,我们对左子空间和右子空间内的数据重复根节点的过程就可以得到一级子节点(5,4)和(9,6),同时将空间和数据集进一步细分,如此往复直到空间中只包含一个数据点。
如之前所述,kd树中,kd代表k-dimension,每个节点即为一个k维的点。每个非叶节点可以想象为一个分割超平面,用垂直于坐标轴的超平面将空间分为两个部分,这样递归的从根节点不停的划分,直到没有实例为止。经典的构造k-d tree的规则如下:
kd树的检索是KNN算法至关重要的一步,给定点p,查询数据集中与其距离最近点的过程即为最近邻搜索。
如在构建好的k-d tree上搜索(3,5)的最近邻时,对二维空间的最近邻搜索过程作分析。
首先从根节点(7,2)出发,将当前最近邻设为(7,2),对该k-d tree作深度优先遍历。
以(3,5)为圆心,其到(7,2)的距离为半径画圆(多维空间为超球面),可以看出(8,1)右侧的区域与该圆不相交,所以(8,1)的右子树全部忽略。
接着走到(7,2)左子树根节点(5,4),与原最近邻对比距离后,更新当前最近邻为(5,4)。
以(3,5)为圆心,其到(5,4)的距离为半径画圆,发现(7,2)右侧的区域与该圆不相交,忽略该侧所有节点,这样(7,2)的整个右子树被标记为已忽略。
遍历完(5,4)的左右叶子节点,发现与当前最优距离相等,不更新最近邻。所以(3,5)的最近邻为(5,4)。
举例:查询点(2.1,3.1)
星号表示要查询的点(2.1,3.1)。通过二叉搜索,顺着搜索路径很快就能找到最邻近的近似点,也就是叶子节点(2,3)。而找到的叶子节点并不一定就是最邻近的,最邻近肯定距离查询点更近,应该位于以查询点为圆心且通过叶子节点的圆域内。为了找到真正的最近邻,还需要进行相关的‘回溯'操作。也就是说,算法首先沿搜索路径反向查找是否有距离查询点更近的数据点。
举例:查询点(2,4.5)
一个复杂点了例子如查找点为(2,4.5),具体步骤依次如下:
上述两次实例表明,当查询点的邻域与分割超平面两侧空间交割时,需要查找另一侧子空间,导致检索过程复杂,效率下降。
一般来讲,最临近搜索只需要检测几个叶子结点即可,如下图所示:
但是,如果当实例点的分布比较糟糕时,几乎要遍历所有的结点,如下所示:
研究表明N个节点的K维k-d树搜索过程时间复杂度为: 。
同时,以上为了介绍方便,讨论的是二维或三维情形。但在实际的应用中,如SIFT特征矢量128维,SURF特征矢量64维,维度都比较大,直接利用k-d树快速检索(维数不超过20)的性能急剧下降,几乎接近贪婪线性扫描。假设数据集的维数为D,一般来说要求数据的规模N满足N»2D,才能达到高效的搜索。
Sklearn中有KDTree的实现,仅构建了一个二维空间的k-d tree,然后对其作k近邻搜索及指定半径的范围搜索。多维空间的检索,调用方式与此例相差无多。
③ 数据挖掘中的分类技术
数据挖掘中的分类技术
KNN(K最近邻算法)
算法核心:如果一个样本在特征空间中K个最相似的样本中的大多数属于一个类别,则该样本也属于这个类别,并具有这个类别的特征
在确定分类时只依靠最邻近的一个或几个样本的类别来决定待分样本所属类别,在做决策时只与极少数的相邻样本有关
由于KNN方法主要依靠周围有限的临近样本,而不是依靠判别类域的方法来确定样本所属类别。对于类域交叉或重叠较多的待分样本集来说,KNN方法较其他方法更合适
决策树
决策树要解决的问题是用哪些属性充当这棵树的各个节点的问题,决策树按分裂标准不同可以分为基于信息论的方法和基于最小GINI指标方法
神经网络
神经网络的学习是一个过程,并按照一定的规则(学习算法)调整各层的权值矩阵,待网络各层权值都收敛到一定值,学习过程结束
支持向量机(SVM)
尽量把样本中从更高维度看起来在一起的样本合在一起
支持向量机的目的是找到一个最优超平面,使分类间隔最大。最优超平面就是要求分类面不但能将两类正确分开,而且使分类间隔最大
在两类样本中离分类面最近且位于平行于最优超平面上的点就是支持向量,为找到最优超平面,只要找到所有的支持向量即可
对于非线形支持向量机,通常做法为把线形不可分转换成线形可分,通过一个非线形映射将低维输入空间中的数据特征映射到高维。
④ knn是什么意思
knn是邻近算法,或者说K最邻近分类算法,全称为K-NearestNeighbor,是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,是K个最近的邻居的意思,说的是每个样本都可以用最接近的K个邻近值来代表。近邻算法是将数据集合中每一个记录进行分类的方法。
knn是邻近算法,或者说K最邻近分类算法,全称为K-NearestNeighbor,是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,是K个最近的邻居的意思,说的是每个样本都可以用最接近的K个邻近值来代表。近邻算法是将数据集合中每一个记录进行分类的方法。
knn算法的核心思想:
如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
⑤ 01 KNN算法 - 概述
KNN算法 全称是K近邻算法 (K-nearst neighbors,KNN)
KNN是一种基本的机器学习算法,所谓K近邻,就是k个最近的邻居。即每个样本都可以用和它 最接近的k个邻近位置的样本 来代替。
KNN是个相对比较简单的算法,比起之前提过的回归算法和分类算法更容易。如果一个人从来没有接触过机器学习的算法,拿到数据后最容易想到的分类方式就是K近邻。打个比方:你们想了解我是个怎样的人,然后你们发现我的身边关系最密切的朋友是一群逗逼,所以你们可以默认我也是一个逗逼。
KNN算法即可以应用于 分类算法 中,也可以应用于 回归算法 中。
KNN在做回归和分类的主要区别,在于最后做预测时候的决策不同。在分类预测时,一般采用 多数表决法 。在做回归预测时,一般使用 平均值法 。
多数表决法: 分类时,哪些样本离我的目标样本比较近,即目标样本离哪个分类的样本更接近。
平均值法: 预测一个样本的平均身高,观察目标样本周围的其他样本的平均身高,我们认为平均身高是目标样本的身高。
再举个例子:
分别根据甜度和脆度两个特征来判断食物的种类。
根据样本我们普遍发现:
比较甜,比较脆的食物都是水果。
不甜,不太脆的食物是蛋白质。
不甜,比较脆的食物是蔬菜。
于是根据目标的样本甜度和脆度两个特征,我们可以对其进行分类了。
k值的选择:
先选一个较小的值,然后通过交叉验证选择一个合适的最终值。
k越小,即使用较小的领域中的样本进行预测,训练误差会减小,但模型会很复杂,以至于过拟合。
k越大,即使用交大的领域中的样本进行预测,训练误差会增大,模型会变得简单,容易导致欠拟合。
距离的度量:
使用欧几里得距离:欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。
决策规划:
分类:多数表决法、加权多数表决法。
回归:平均值法、加权平均值法。
加权多数表决法:
平均值法和加权平均值法:
同样看上面的图,上方的三个样本值为3,下面两个样本值为2,预测?的值。
如果不考虑加权,直接计算平均值:
(3 * 3 + 2 * 2) / 5 = 2.6
加权平均值:权重分别为1/7和2/7。计算加权平均值:
(3 * 3* 1/7 + 2 * 2 * 2/7) / 5 = 2.43
1、蛮力实现(brute):
计算预测样本到所有训练集样本的距离,然后选择最小的k个距离,即可得到k个最邻近点。
缺点:当特征数多、样本数多时,算法的效率比较低。
2、KD树 (kd_tree):
首先对训练数据进行建模,构建KD树,然后根据建好的模型来获取邻近样本数据。
后续内容会介绍KD树搜索最小值的方式,让大家直观感受到KD树比蛮力实现要少检索多少数据。