详细的的KNN代码——python实现

直接放代码

import random

import numpy as np
#设置k=3
k=3

def readyData():
    #准备一个训练数组
    group=np.array([[78,89,88],
                    [43,23,53],
                    [87,69,99],
                    [88,79,69],
                    [54,33,44],
                    [77,99,82]])
    #并给上对应的标签
    labels=['好成绩','差成绩','好成绩','好成绩','差成绩','好成绩']
    return group,labels

def Classify_KNN(test,dataSet,labels,k):
    #训练数组有多少行,shape[0]得到DataSet的行数
    row_num=dataSet.shape[0]
    #先将test数据变成一个跟dataSet同样多行的数组,再与dataSet相减
    xiangjian=np.tile(test,(row_num,1))-dataSet
    #相减后平方
    pingfang=xiangjian**2
    '''
        关于numpy.sum的用法
        https://0x9.me/8BUsa
            c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]])
            print c.sum()
            print c.sum(axis=0)
            print c.sum(axis=1)
            结果分别是:19, [3 8 8], [ 3 14  2]
            axis=0, 表示列。
            axis=1, 表示行。
        '''
    #平方相加
    row_sum=pingfang.sum(axis=1)
    #再开方
    distances=row_sum**0.5
    # argsort()将距离从小到大排序,并得到之前所在的index
    sortDistance=distances.argsort()

    # 定一个记录类别次数的字典
    countClass={}

    for i in range(k):
        test_label=labels[sortDistance[i]]
        countClass[test_label]=countClass.get(test_label,0)+1
    sortCountClass=sorted(countClass,key=lambda x:[2],reverse=True)

    return sortCountClass[0]

if __name__=='__main__':
    group,labels=readyData()
    testData=[]
    for i in range(10):
        Chinese=random.random()*100
        Math=random.random()*100
        English=random.random()*100
        tem=[Chinese,Math,English]
        testData.append(tem)
    for test in testData:
        print(test)
        result=Classify_KNN(test,group,labels,k)
        print(result)

参考资料:https://www.cnblogs.com/yyxf1413/p/6253995.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值