美文网首页
knn:分类

knn:分类

作者: 鲸鱼酱375 | 来源:发表于2019-06-16 03:43 被阅读0次
image.png
image.png
image.png
image.png

1.knn思路

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离
接下来对KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类

2.knn算法

1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

3.代码实现

为了面试,手推knn
详细的代码

from numpy import *
import operator

##给出训练数据以及对应的类别
def createDataSet():
    group = array([[1.0,2.0],[1.2,0.1],[0.1,1.4],[0.3,3.5]])
    labels = ['A','A','B','B']
    return group,labels

###通过KNN进行分类
def classify(input,dataSe t,label,k):
    dataSize = dataSet.shape[0]
    ####计算欧式距离
    diff = tile(input,(dataSize,1)) - dataSet
    sqdiff = diff ** 2
    squareDist = sum(sqdiff,axis = 1)###行向量分别相加,从而得到新的一个行向量
    dist = squareDist ** 0.5
    
    ##对距离进行排序
    sortedDistIndex = argsort(dist)##argsort()根据元素的值从大到小对元素进行排序,返回下标

    classCount={}
    for i in range(k):
        voteLabel = label[sortedDistIndex[i]]
        ###对选取的K个样本所属的类别个数进行统计
        classCount[voteLabel] = classCount.get(voteLabel,0) + 1
    ###选取出现的类别次数最多的类别
    maxCount = 0
    for key,value in classCount.items():
        if value > maxCount:
            maxCount = value
            classes = key

    return classes    

4.k值的选取

我们一般选取一个较小的数值,通常采取 交叉验证法来选取最优的k值。(也就是说,选取k值很重要的关键是实验调参,类似于神经网络选取多少层这种,通过调整超参数来得到一个较好的结果)

5.归一化

为了保证每个特征同等重要性,我们这里对每个特征进行归一化。

5.1 线性归一化 Min-Max scaling

image.png

5.2 0均值标准化(Z-score standardization)

image.png

6.优缺点

  • 优点非常简单的分类算法没有之一,人性化,易于理解,易于实现适合处理多分类问题,比如推荐用户
  • 缺点属于懒惰算法,时间复杂度较高,因为需要计算未知样本到所有已知样本的距离样本平衡度依赖高,当出现极端情况样本不平衡时,分类绝对会出现偏差可解释性差,无法给出类似决策树那样的规则向量的维度越高,欧式距离的区分能力就越弱

reference:
https://www.cnblogs.com/ybjourney/p/4702562.html
https://www.jianshu.com/p/33dbf9906ff2

https://zhuanlan.zhihu.com/p/25994179

相关文章

  • 机器学习笔记汇总

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

  • 100天机器学习实践之第7天

    K—近邻分类算法(KNN) KNN是什么? K—近邻算法(简称KNN)是一种虽然简单但很常用的分类算法,也可用于回...

  • 利用Python进行数字识别

    思路 通过Python实现KNN算法。而KNN算法就是K最近邻(k-Nearest Neighbor,KNN)分类...

  • kNN分类算法实例

    写在前面: kNN算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法,它是分类技术中最简单...

  • 大数据算法:分类算法

    KNN分类算法 KNN算法,即K近邻(K Nearest Neighbour)算法,是一种基本的分类算法。其主要原...

  • KNN算法:K最近邻分类算法(K-NearestNeighbor

    一、KNN算法概述 最近邻算法,或者说K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类...

  • 深入浅出KNN算法(一) 介绍篇

    一.KNN算法概述 KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学...

  • KNN分类

    KNN分类的全称是K Nearest Neighbour,即K最近邻分类算法,其中的K表示最接近自己的K个数据样本...

  • KNN分类

    邻近算法(kNN,k-NearestNeighbor),是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k...

  • knn:分类

    1.knn思路 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本...

网友评论

      本文标题:knn:分类

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