python 机器学习 |
您所在的位置:网站首页 › 水仙花所属类别 › python 机器学习 |
K 近邻分类理论及鸢尾( Iris )数据集实例操作
一、K 近邻分类理论二、K 近邻分类实例操作(1)导入数据划分训练集测试集(3)数据标准化(4)用 K 近邻法建立模型(5)性能评估参考文献:
一、K 近邻分类理论
K 近邻算法简称 KNN 算法,由 Cover 和 Hart 在 1968 年提出,是一种基本分类与回归方法。K 近邻算法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。K 近邻的一个常用的实现方法是 kd 树( KD-Tree ),可以做到以空间换时间的效果。 思路:如果一个样本在特征空间中的 K 个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 因此,给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 K 个实例,这 K 个实例的多数属于某个类,就把该输入实例分类到这个类中。 一个例子:下图中,要决定绿色圆是被分成红色三角形一类还是蓝色四方形一类?
注意: ① 在 KNN 算法中,所选择的邻居都是已经正确分类的对象,该方法在分类决策上只依据最邻近的一个或者K个样本的类别来决定待分样本所属的类别。(而分类问题K一般取奇数) ② KNN 算法简单有效,分类器不需要使用训练集进行训练。 ③ KNN 方法从原理上依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。 ④ K 近邻算法的三个基本要素:距离的度量、K 值的选择和分类决策规则。 ⑤ KNN 算法不仅可以用于分类,还可以用于回归。通过找出一个样本的 K 个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值( weight ),如权值与距离成正比。 ⑥数据的所有特征都要做可比较的量化。若是数据特征中存在非数值的类型,必须采取手段将其量化为数值。举个例子,若样本特征中包含颜色(红黑蓝)一项,颜色之间是没有距离可言的,可通过将颜色转换为灰度值来实现距离计算。另外,样本有多个参数,每一个参数都有自己的定义域和取值范围,他们对 distance 计算的影响也就不一样,如取值较大的影响力会盖过取值较小的参数。为了公平,样本参数必须做一些 scale 处理,最简单的方式就是所有特征的数值都采取归一化处置。 适用范围:该算法适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法容易产生误差。 不足: ① 该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数(可以采用权值的方法来改进,即和该样本距离小的邻居权值大)。 ② 该算法的计算量较大,因为对每一个待分类的样本都要计算它到全体已知样本的距离,才能求得它的 K 个最近邻点(目前常用的解决方法是:事先对已知样本点进行剪辑,去除对分类作用不大的样本)。 算法描述: ① 计算测试数据与各个训练数据之间的距离; ② 按照距离的递增关系进行排序; ③ 选取距离最小的 K 个点; ④ 确定前 K 个点所在类别的出现频率; ⑤ 返回前 K 个点中出现频率最高的类别作为测试数据的预测分类。 二、K 近邻分类实例操作下面我们以“鸢尾( Iris )数据集”为例使用K近邻模型对其进行分类,Iris 的数据集曾经被著名统计学家 Fisher 用在他的论文当中。 (1)导入数据 # 从 sklearn.datasets 导入 iris 数据加载器 from sklearn.datasets import load_iris # 使用加载器读取数据并且存入变量 iris iris = load_iris() # 查验数据规模 iris.data.shape
由此可见,K 近邻分类器虽然简单,不需要进行参数训练,但是使用的计算量大、内存消耗大。只要优质数据量足够大,KNN在理论上能保证取得较好的效果。 参考文献:[1] 范淼,李超.Python 机器学习及实践[M].清华大学出版社, 北京, 2016. |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |