机器学习k近邻算法

Posted lpworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习k近邻算法相关的知识,希望对你有一定的参考价值。

k临近算法(解决分类问题):

  已知数据集,以及该数据对应类型

  给出一个数据x,在已知数据集中选择最接近x的k条数据,根据这k条数据的类型判断x的类型

具体实现:

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

def classify0(inX,dataSet,lables,k):
    dataSetSize=dataSet.shape[0]    #dataset是4*2的二维数组,shape[0]=4,shape[1]=2
    diffMat=tile(inX,(dataSetSize,1))-dataSet   #tile(inX,(dataSetSize,1))=[inX,inX,inX,inX],1代表每行inX重复一次
    sqDiffMat=diffMat**2    #数组中每个值都**2
    sqDistances=sqDiffMat.sum(axis=1)   #sum(axis=?)第?个维度的相加,可理解为第?层[]里的元素相加
    distances=sqDistances**0.5  #数组中每个值都**0.5
    sortedDistIndicies=distances.argsort()  #argsort()从小到大返回索引
    classCount={}   #花括号{}:代表dict字典数据类型
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]    #前i小的类型
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1   #dict.get(key, default=None) key找不到返回default
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #按字典第2个值排序,True表示从大到小排序
    return sortedClassCount[0][0]   #{(B,2),(A,1)} [0][0]代表B

group,labels=createDataSet()
print(classify0([0,0],group,labels,3))

 

以上是关于机器学习k近邻算法的主要内容,如果未能解决你的问题,请参考以下文章

监督学习算法_k-近邻(kNN)分类算法_源代码

[机器学习与scikit-learn-18]:算法-K近邻算法KNN的原理与代码实例

机器学习实战☛k-近邻算法(K-Nearest Neighbor, KNN)

万字详解·附代码机器学习分类算法之K近邻(KNN)

机器学习——k近邻算法原理分析与python代码实现

机器学习实战☛k-近邻算法(K-Nearest Neighbor, KNN)