K-近邻算法

我们有一组数据集合,该数据集合我们已经分好类了,知道哪个数据是属于哪个类别的。在这个数据集合基础上,我们拿到了一个新的数据,那么,我们如果认为这个数据应该是属于哪个类别呢?

在K-近邻算法中,我们把这个新的数据和已知的数据集合中的每一数据进行距离的计算,然后选择出K个距离最近的已知数据,在这K个距离最近的已知数据中,看哪些类别出现的概率是最大的。哪个类别概率最大,那么这个新的数据就最可以属于这个类别。

这就是:K-近邻算法。

看上去很简单,主要技术点在距离的计算 这块。

距离的计算主要使用欧式公式进行,可以google下相关算法。

 

K-近邻算法:

from numpyimport *

import operator

from os importlistdir

 

defclassify0(inX, dataSet, labels, k):

    dataSetSize = dataSet.shape[0]

    diffMat = tile(inX, (dataSetSize,1)) -dataSet

    sqDiffMat = diffMat**2

    sqDistances = sqDiffMat.sum(axis=1)

    distances = sqDistances**0.5

    sortedDistIndicies =distances.argsort()    

    classCount={}         

    for i in range(k):

        voteIlabel =labels[sortedDistIndicies[i]]

        classCount[voteIlabel] =classCount.get(voteIlabel,0) + 1

    sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1), reverse=True)

    return sortedClassCount[0][0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值