KNN算法实现代码实现借鉴了大牛博客,并加入了详细的代码注释

#coding ='utf-8'
import numpy as np
import operator

def Knn_Classify(testdta, traindata, labels, k):
    datasize = traindata.shape[0]
    diffMat = np.tile(testdta, (datasize, 1)) - traindata
    sqDiff = diffMat ** 2
    sqDistance = sqDiff.sum(axis=1)
    distance = sqDistance ** 0.5  #计算欧氏距离
    sorteddiatcaneindex = distance.argsort() #排序并返回索引
    classcount = {}
    #选择距离最近的K个值
    for i in range (k):
        votelabel = labels[sorteddiatcaneindex[i]] #根据索引取最近的几个值
        classcount[votelabel] = classcount.get(votelabel, 0) + 1 #根据字典来统计每个类有多少个值
    sortedclasscount = sorted(classcount.items(), key=operator.itemgetter(1), reverse=True) #排序
    return sortedclasscount[0][0]  #选出个数最多的类别返回

#定义一个生成“训练样本集”的函数,包含特征和分类信息
def createDataSet():
    group=np.array([[1, 1.1], [1, 1], [0, 0], [0, 0.1], [1, 1.2]])
    labels=['A', 'A', 'B', 'B', 'A']
    return group,labels

#主程序入口
#缺点是要计算测试数据与每一个训练数据的距离,如果数据量很大或者需要处理的维度高计算量就很庞大了
if __name__=='__main__':
    testdata = [2, 2]
    group, labels = createDataSet()
    out = Knn_Classify(testdata, group, labels, 2)
    print(out)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值