K近邻相关概念及其Python实现
2016-09-15 12:29
295 查看
K近邻
它是一种基本分类与回归的方法。在分类时,根据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测。K近邻不具有显式的学习过程。模型
K近邻法,实际上对应特征空间的划分。以最近邻法为例,子空间的划分,是相邻点之间做垂直平分线/面,然后相交集后,划分出的各个子空间。当实例点处在某一特征子空间中,那么它的类别就对应于特征子空间所对应的类别。要找出最近的K个点,对于“最近”这个概念,首先就要定义实例点之间的距离问题。
对于特征空间是n维实数向量空间,一般使用Lp距离来度量:
p=2时,就是常用的欧式距离。
p=1时,叫做曼哈顿距离。求的是各坐标距离绝对值之和。
特例是,当p=∞时,我们是取各个坐标距离的最大值,即 max|Xi-Xj| 。
K值取值的大小对结果会产生重大影响。
- K取小,那么预测结果会对近邻的实例点非常敏感。此意味着整体模型变得复杂,容易过拟合。
- K取大,这时与输入实例较远的训练实例也会起作用。模型虽然变简单了,但是训练集的信息没有被完全利用。
策略
K近邻策略很容易理解,就是在K个近邻里,进行多数投票机制。对于最近邻的k个训练实例点构成一个集合Nk(x),设这一区域点的真实类别是Cj,那么,误分类率可以表示为:
- 此区域内不是Cj类别的点的个数 / 此区域总的点个数K。欲使误分类率最小,就要使此区域内本身属于Cj点的个数达到最多。所以,我们采用多数表决规则就等价于误分类率最小化。
算法:kd树
对于kd树,详见以下博客,讲的很清楚:http://www.cnblogs.com/eyeszjwang/articles/2429382.html
代码实现
from numpy import * def KnnClasssify(testing,trainning,lables,k): numPots = len(trainning) temp1 = tile(testing,[numPots,1]) - trainning sqrtemp1 = temp1 ** 2 temp2 = sqrtemp1.sum(axis=1) distances = temp2 ** 0.5 sortedDistance = distances.argsort() classLable={} for i in xrange(k): tmplable = lables[ sortedDistance[i] ] classLable[tmplable] = classLable.get(tmplable,0) + 1 return max(classLable) if __name__ == '__main__': trainning = [1.0,0.9],[1.0,1.0],[0.1,0.2],[0.0,0.1] lables = ['A','A','B','B'] testing = [1.2,1.0] lable = KnnClasssify(testing,trainning,lables,3) print lable
距离用了简单的二范数来检测。
相关文章推荐
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- K近邻相关概念及其Python实现
- 决策树与随机森林相关概念及其Python实现
- 决策树与随机森林相关概念及其Python实现