美文网首页
KNN算法基础

KNN算法基础

作者: Yonginggg | 来源:发表于2019-08-03 10:38 被阅读0次

KNN算法

k-近邻算法(kNN), 它的⼯作原理是:存在⼀个样本数据集合, 也称作训练样本集, 并且样本集中每个数据都存
在标签, 即我们知道样本集中每⼀数据与所属分类的对应关系。 输⼊没有标签的新数据后, 将新数据的每个特征与样本集中数据对应的特征进⾏⽐较, 然后算法提取样本集中特征最相似数据(最近邻) 的分类标签。 ⼀般
来说, 我们只选择样本数据集中前k个最相似的数据, 这就是k-近邻算法中k的出处, 通常k是不⼤于20的整数。 最后, 选择k个最相似数据中出现次数最多的分类, 作为新数据的分类

👇机器学习实战中的例子

使⽤k近邻算法分类爱情⽚和动作⽚。有⼈曾经统计过很多电影的打⽃镜头和接吻镜头, 图2-1显⽰了6部电影的
打⽃和接吻镜头数。 假如有⼀部未看过的电影, 如何确定它是爱情⽚还是动作⽚呢? 我们可以使⽤kNN来解决这个问题。

⾸先我们需要知道这个未知电影存在多少个打⽃镜头和接吻镜头

image image

即使不知道未知电影属于哪种类型, 我们也可以通过某种⽅法计算出来。⾸先计算未知电影与样本集中其他电影的距离

image

现在我们得到了样本集中所有电影与未知电影的距离, 按照距离递增排序, 可以找到k个距离最近的电影。 假定k=3, 则三个最靠近的电影依次是He’s Not Really into Dudes、 Beautiful Woman和California Man。 k近邻算法按照距离最近的三部电影的类型, 决定未知电影的类型, ⽽这三部电影全是爱情⽚, 因此我们判定未知电影是爱情⽚。

完整的代码

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, labels, k):
    dataSetSize = dataSet.shape[0]
#dataSet是一个4*2的矩阵,dataSet.shape[0]即dataSet第一维的长度=4,dataSet.shape[1]=2
# >>> dataSetSize
# 4

    #❶(以下三⾏) 距离计算
    diffMat = tile(inX, (dataSetSize,1)) - dataSet 
# tile[[0,0],(4,1)] 将[0,0]拓展成4行,1列
# >>> tile(inX, (dataSetSize,1))
# array([[0, 0],
#        [0, 0],
#        [0, 0],
#        [0, 0]])
# >>> diffMat
# array([[-1. , -1.1],
#        [-1. , -1. ],
#        [ 0. ,  0. ],
#        [ 0. , -0.1]])
    sqDiffMat = diffMat**2
# diffMat**2, 平方运算
# >>> sqDiffMat
# array([[ 1.  ,  1.21],
#        [ 1.  ,  1.  ],
#        [ 0.  ,  0.  ],
#        [ 0.  ,  0.01]])
    sqDistances = sqDiffMat.sum(axis=1)
# 我们平时用的sum应该是默认的axis=0 就是普通的相加(列相加)
# 而当加入axis=1以后就是将一个矩阵的每一行向量相加
# >>> sqDistances
# array([ 2.21,  2.  ,  0.  ,  0.01])
    distances = sqDistances**0.5
# >>> distances
# array([ 1.48660687,  1.41421356,  0.        ,  0.1       ])
    sortedDistIndicies = distances.argsort()
# argsort函数返回的是数组值从小到大的索引值
# >>> sortedDistIndicies
# array([2, 3, 1, 0], dtype=int64)
    classCount={}

    #❷ (以下两⾏) 选择距离最⼩的k个点
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
# >>> voteIlabel = labels[sortedDistIndicies[0]]
# >>> voteIlabel
# 'B'
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
        #👆统计距离最近的K个节点中,A和B的数量
    sortedClassCount = sorted(classCount.items(),
    # 👆Python 字典 items() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回可遍历的(键, 值) 元组数组。
        #❸ 排序
        key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]
group,labels = createDataSet()
print(classify0([0,0], group, labels, 3))

相关文章

  • kNN算法

    一. kNN算法 kNN(k-NearestNeighbor),即k最近邻算法,是机器学习算法中最基础的入门算法。...

  • java实现Knn算法,用iris数据集进行验证

    Knn算法 Knn算法是基础的机器学习算法之一,典型的惰性学习。但是其效果很好,其原理不再赘述,比较简单。笔者利用...

  • KNN算法(东拼西凑版本)

    0.KNN是什么 KNN算法中文名称叫做K近邻算法,是众多机器学习算法里面最基础入门的算法。它是一个有监督的机器学...

  • KNN算法基础

    KNN算法是机器学习中最好理解的算法之一,属于惰性学习算法的典例。惰性指模型仅通过对训练数据集的记忆功能进行预测,...

  • KNN算法基础

    KNN算法 k-近邻算法(kNN), 它的⼯作原理是:存在⼀个样本数据集合, 也称作训练样本集, 并且样本集中每个...

  • KNN与K-Means算法的区别

    内容参考:Kmeans算法与KNN算法的区别kNN与kMeans聚类算法的区别 KNN-近邻算法-分类算法 思想:...

  • knn算法

    knn算法 knn算法简介 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法。所谓K...

  • KNN近邻算法总结

    目录 一、KNN近邻算法思想 二、KNN模型三大要素 三、KNN算法实现步骤 四、KNN算法的KD树实现 五、总结...

  • 机器学习笔记汇总

    kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法

  • 01 KNN算法 - 概述

    KNN算法全称是K近邻算法 (K-nearst neighbors,KNN) KNN是一种基本的机器学习算法,所谓...

网友评论

      本文标题:KNN算法基础

      本文链接:https://www.haomeiwen.com/subject/tstjdctx.html