ML-KNN

KNN-k 近邻算法

KNN属于分类算法,原理比较简单,简单概括就是对测试数据和所哟样本点进行距离的测算,最后选取K个最近的点的集合, 在其中选取类别出现最多的点的分类作为测试数据的分类。
       
以图说明,这里存在矩阵
	trainMat = array([[1.,1.1],[1.,1.],[0.,0.],[0.,0.1]])
作图:
         
       当我们的测试点(x1,y1)分别计算和这些店的距离之后,选出k个最小距离点之后,统计这k个点哪个类别的点最多就选这个类别, 很简单吧。


       KNN代码实现:
def  KNN_classify(testmat,dataset,labels,k):
	dataSetSize = dataset.shape[0]
	#求两点间的距离公式
	diffMat = tile(testmat,(dataSetSize,1)) - dataset
	sqdiffMat = diffMat ** 2
	sqdistance = sqdiffMat.sum(axis=1)
	distance = sqdistance ** 0.5
	sortdistance = distance.argsort()  #排序
	print sortdistance
	classcount = {}
	#统计前k个数据的类别出现次数
	for i in range(k):
		votelabel = labels[sortdistance[i]]
		classcount[votelabel] = classcount.get(votelabel,0) + 1
	sortedclass = sorted(classcount.iteritems(),key = operator.itemgetter(1),reverse=True)
	return sortedclass[0][0]

使用上面的训练数据进行新数据的分类测试
    
xData = array([[ 1., 1.1],
 				[ 1.,1. ],
 				[ 0.,0. ],
 				[ 0.,  0.1],
 				[ 1., 2. ],
 				[ 3.,  2. ],
 				[ 0.5, 0.8]])
yLabel = array([1,1,-1,-1,1,1,-1])
  分别测试两个数据点 
xinx1 = array([[0.,0.2]])
xinx2 = array([[5,2]])

print KNN_classify(xinx1,xData,yLabel,4)
print KNN_classify(xinx2,xData,yLabel,4)
得到结果
-1
1

总结: KNN算法是分类算法中最简单有效的算法,kNN 基于实例学习,所以每次进行分类的时候都需要将所有的训练数据一起进行学习,这样就带了内存和效率上的损失,属于非参数行分类学习。KNN对于严重大数值型数据比较敏感,如果上一例中训练数据中有比较大的坐标位置,这样在计算距离的时候就容易产生偏差,所以要用到归一化的工具来同意训练数据(归一化的问题在以后的博文中会介绍)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值