KNN(python实现)

一,KNN算法(K临近算法)

KNN算法是用来解决机器学习三大问题中的分类与回归的基本算法之一,这种算法可以使用已有的数据对尚未进行分类的输入向量进行分类,算法思想大概是如下几步:

1,构造矩阵来计算输入向量与样本集中每个样本之间的距离

2,按照距离递增次序进行排序

3,选取前ķ个距离最小的点

4、通过前ķ个点标签类别的出现频率来确定输入向量的标签类别

我们的核心思想是使用欧氏距离公式求输入向量与样本数据的距离,所以这种算法的适用性于仅在当数据为连续性数据时(数据可以被计算距离时)才能使用

具体代码如下:

# creatDataSet():
#     InX=[0,0] 输入向量:被分类的向量 1 x N(数量 x 维度)
#     dataSet=array([(1.0,1.2),(1.0,1.0),(0,0),(0,0.1)]) M x N
#     labels=array(['A','A','B','B']) 标签向量:训练数据的输出 M x 1
#     k=3 最近邻居数目

def classify0(inX,dataSet,labels,k):
    #1构造矩阵
    dataSetSize =dataSet.shape[0]
    diffMat=tile(inX,(dataSetSize,1))-dataSetSize
    #2求欧式距离
    sqDiffMat=diffMat**2
    sqDistances=sqDiffMat.sum(axis=1)
    distances=sqDistances**0.5
    #3对向量进行排序
    sortedDisIndicies=distances.argsort()
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDisIndicies[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]

    print(dataSetSize)

解析:

1,#构造矩阵:

col:列表头  row:行表头

(1).shape返回一个矩阵每一维度的长度,例如:一维返回列长度,二维返回(row.len,col.len),以此类推

所以在矩阵中的形状[0]就是行数

(2)区块(一,(行,列))是构建一个将向量一个在一维横向重复COL次后向二维纵向重复排次的矩阵

例如:

瓦((2,3),(2,3))=

[[2,3,2,3,2,3],

[2,3,2,3,2,3]]

2,#求欧氏距离

因为dataSetsize =行数,构造出来的矩阵是和训练矩阵规模相同的,

所以让两矩阵相减后求值后平方求和便是所求的欧氏距离

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值