机器学习之KNN算法原理及Python实现方法详解-创新互联
本文实例讲述了机器学习之KNN算法原理及Python实现方法。分享给大家供大家参考,具体如下:
创新互联技术团队10余年来致力于为客户提供网站设计、成都网站制作、成都品牌网站建设、成都全网营销推广、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了上1000家网站,包括各类中小企业、企事单位、高校等机构单位。文中代码出自《机器学习实战》CH02,可参考本站:
机器学习实战 (Peter Harrington著) 中文版
机器学习实战 (Peter Harrington著) 英文原版 [附源代码]
KNN算法介绍
KNN是一种监督学习算法,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判(投票法)或者回归。若K=1,新数据被简单分配给其近邻的类。
KNN算法实现过程
(1)选择一种距离计算方式, 通过数据所有的特征计算新数据与已知类别数据集中的数据点的距离;
(2)按照距离递增次序进行排序,选取与当前距离最小的k个点;
(3)对于离散分类,返回k个点出现频率最多的类别作预测分类;对于回归则返回k个点的加权值作为预测值;
算法关键
(1)数据的所有特征都要做可比较的量化
若是数据特征中存在非数值的类型,必须采取手段将其量化为数值。例如样本特征中包含颜色,可通过将颜色转换为灰度值来实现距离计算。
(2)样本特征要做归一化处理
样本有多个参数,每一个参数都有自己的定义域和取值范围,他们对距离计算的影响不一样,如取值较大的影响力会盖过取值较小的参数。所以样本参数必须做一些scale处理,最简单的方式就是所有特征的数值都采取归一化处置。
(3)需要一个距离函数以计算两个样本之间的距离
距离的定义:欧氏距离、余弦距离、汉明距离、曼哈顿距离等,一般选欧氏距离作为距离度量,但是这是只适用于连续变量。在文本分类这种非连续变量情况下,汉明距离可以用来作为度量。通常情况下,如果运用一些特殊的算法来计算度量的话,K近邻分类精度可显著提高,如运用大边缘最近邻法或者近邻成分分析法。
(4)确定K的值
K值选的太大易引起欠拟合,太小容易过拟合。交叉验证确定K值。
KNN分类
分类算法常采用多数表决决定。一个缺点是出现频率较多的样本将会主导测试点的预测结果。解决这个缺点的方法之一是在进行分类时将K个邻居到测试点的距离考虑进去。若样本到测试点距离d,则选1/d为该邻居的权重,统计k个邻居所有类标签的权重和,值大的就是新数据点的预测类标签。
KNN回归
KNN回归是取K个邻居类标签值得加权作为新数据点的预测值。
优缺点
(1)KNN算法的优点
- 1.简单、有效。
- 2.重新训练的代价较低(类别体系的变化和训练集的变化,在Web环境和电子商务应用中是很常见的)。
- 3.计算时间和空间线性于训练集的规模(在一些场合不算太大)。
- 4.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
- 5.该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
(2)KNN算法缺点
- 1.KNN算法是懒散学习方法(lazy learning,基本上不学习),一些积极学习的算法要快很多。
- 2.类别评分不是规格化的(不像概率评分)(???)。
- 3.输出的可解释性不强,例如决策树的可解释性较强。
- 4.该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算最近的邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
- 5.计算量较大。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。
KNN实现
import numpy as np import operator import matplotlib import matplotlib.pyplot as plt from os import listdir def Create_DataSet(): group = np.array([[1.0, 1.1],[1.0,1.0],[0,0],[0,0.1]]) labels = ['A','A','B','B'] return group,labels
新闻标题:机器学习之KNN算法原理及Python实现方法详解-创新互联
当前URL:http://azwzsj.com/article/gddjd.html