kNN分类算法

一、算法实施过程

        (1)计算已知类别数据集中的点与当前点之间的距离;

        (2)按照距离递增次序排序;

        (3)选取与当前点距离最小的K个点;

        (4)确定前K个点所在类别的出现频率;

        (5)返回前K个点出现频率最高的类别作为当前点的预测分类。


二、Python代码实现

from numpy import *
import operator


def createDataSet():
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels


def classify0(inX,dataSet,labels,k):
dataSetSize=dataSet.shape[0]
diffMat=tile(inX,(dataSetSize,1))-dataSet    //1
sqDiffMat=diffMat**2
sqDistances=sqDiffMat.sum(axis=1)//2
distances=sqDistances**0.5
sortedDistIndicies=distances.argsort()//从小到大排序
classCount={}
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]]
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 //3
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)//sorted为排序函数
return sortedClassCount[0][0]
if __name__=="__main__":
group,labels=createDataSet()
className=classify0([0,0],group,labels,3)

print(className)


1、tile函数:

                  numpy.tile([1,1],[2,3])=([1,1],[1,1],[1,1]

                                                        [1,1],[1,1],[1,1])

                   第一个参数是要生成的数,第二个参数控制要生成的行数与列数。

2、xx.sum()

x = np.array([[0, 1, 2], 

                    [3, 4, 5], 

                    [6, 7, 8]])

print x.sum()
print x.sum(axis=0)
print x.sum(axis=1)

结果分别是:36, [9 12 15], [ 3 12  21]

3、xx.get(x,'',xx)

第一个参数为的查找关键字,若找不到则返回第二个参数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值