KNN算法及python问题

本文介绍了一个简单的KNN算法实现过程,包括数据集的创建、距离计算、分类预测等关键步骤。通过实例演示了如何利用Python进行KNN算法的编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习实战之KNN

创造数据集

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

创造一个4*2的array,数值可理解为坐标,label就是对应分类

python时间

tile

tile的作用是把一个矩阵复制出一个新的矩阵,如A是一个矩阵

tile(A,1) = A
tile(A,2,3)就是把A作为一个元素,复制成新的2*3的矩阵,每一个元素就是一个A

shape

shape是获取矩阵的size的函数

A = [1,2,3;4,5,6;7,8,9]
A.shape = (3,3)
A.shape[0] = A.shape[1] = A.shape[2] = 3

argsort

argsort是一个排序后获取下标的函数

A = [5,4,3,1,2]
B = A.argsort() = [3,4,2,1,0]

itemgetter

itemgetter是operator的一个函数

b=operator.itemgetter(n-1)
b成为获取对象第n个元素的函数
A = [1,2,3]
b(A) = 2

axis

axis是表示矩阵的行列的

a = [1,2,3; 4,5,6]
axis默认为0,表示列
a.sum() = 21
a.sum(axis=0) = [5,7,9] 列求和
a.sum(axis=1) = [6,15]  行求和

dict.get

python中的字典dict,获取对应值有两种方式
1. key2 = dict[key1] ,但是假如字典不存在key1会发生错误
2. key2 = dict.get(key1,default) 当不存在key1,返回默认值default

完整代码及注释

py 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):
    #inX是待分类的数据,dataSet是已知的数据集,labels是已知数据集的分类,k是算法抽取的最相邻点的数量
    dataSetSize = dataSet.shape[0]
        #获取dataSet的点的个数
    diffMat = tile(inX,(dataSetSize,1)) - dataSet
        #tile函数把待分类点组成一个n维向量,再和原有数据集每个点作差
        #相当于,得到(x-x1),(x-x2),(x-x3)···
    sqDiffMat = diffMat ** 2
        #(x-x1)^2 ···
    sqDistances = sqDiffMat.sum(axis=1)
        #各个维度的差的平方求和
    distances = sqDistances ** 0.5
        #和开方最终得到欧式距离
    sortedDistIndicies = distances.argsort()
        #根据求得的距离进行排序,并得到对应的数据集的下标
    classCount = {}
        #新建字典,放置距离小的数据的标签及其对应数量
    for i in range(k):
        #放置距离小的前K个点
        voteIlabel = labels[sortedDistIndicies[i]]
            #根据下标得到当前这个数据点的label
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
            #字典中label对应值+1
    sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
        #根据字典的key2进行排序
        sorted classCount
    return sortedClassCount[0][0]
        #排序产生的是一个列表,列表的元素是一个tuple
        #返回出现最多的标签,也就是最终分类结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值