zoukankan      html  css  js  c++  java
  • K近邻分类算法

    1、算法思路

      通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近的K个训练样例,K个样品中哪个类别的训练样品占比较多,则该分类样品就属于哪个类别。

    2、算法步骤:

    (1)初始化距离为最大值

    (2)计算未知样本和每个训练样本的距离dist

    (3)得到目前K各最临近样本中的最大距离maxdist

    (4)如果dist小于maxdist,则将该样本作为K—最近邻样本

    (5)重复步骤2/3/4,直到位置样本和所有训练样本的距离

    (6)统计K—最近邻样本中每个类标号出现的次数

    (7)选择出现频率最大的类标号作为未知样本的类标号

    3、算法优缺点

    优点:简单、易于理解和实现,无需估计参数,无需训练,是和赝本容量比较大的分类问题,特别适合多分类问题

    缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢,可解释性较差,无法给出决策树那样的规则,对于样本量较小的分类问题,或产生误分

    4、常见问题

    (1)K设置多大合适:

    K太小,分类结果容易受到噪声点影响,K太大,近邻中可能包含太多其他类别的点(对距离加权,可以降低K值设定的影响)

    K值通常采用交叉检验来确定(以K=1为基准)  经验规则,K一般低于训练样本数的平方根

    (2)类别如何判定合适

    股票法没有考虑近邻的距离远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更加恰当。

    (3)如何选择合适的距离衡量

    高维度对距离衡量的影响:众所周知变量数越多,欧式距离的区分能力越差;

    变量值域对距离的影响:值越大的变量常常在距离的计算值占据主导作用,因此应先对变量进行标准化

    (4)训练样本是否要一视同仁

    在训练集中,有些样本可能是更值得依赖的,可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响

    (5)性能问题

    KNN是一种懒惰算法,平时不训练,直到实际分类时才临时去找K个近邻

    懒惰的后果,构造模型简单,但是在对测试样本分类时系统开销大,因为要扫描全部的训练样本并计算距离

    已经有的方法提高计算的效率:压缩训练样本量等

    (6)能发大幅度减少训练样本量有保持分类精度

    浓缩技术

    编辑技术

    (7)python实现电影分类

    import numpy as np 
    from sklearn import neighbors
    knn = neighbors.KNeighborsClassifier() #取得knn分类器
    data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]]) # <span style=
             "font-family:Arial, Helvetica, sans-serif;">data对应着打斗次数和接吻次数</span>
    labels = np.array([1,1,1,2,2,2]) #<span style="font-family:Arial, Helvetica,
    sans-serif;
    ">labels则是对应Romance和Action</span>
    knn.fit(data,labels) #导入数据进行训练'''
    #Out:KNeighborsClassifier(algorithm=
    'auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=1, n_neighbors=5, p=2,
            weights=
    'uniform')
    knn.predict([18,90])
  • 相关阅读:
    Hadoop命令手册
    HDFS配额管理指南
    HDFS权限管理用户指南
    Hadoop分布式文件系统使用指南
    Hadoop分布式文件系统:架构和设计
    ImageLoader 图片加裁
    发送 一个无序广播
    Intent 转向
    Volley Get Post 方法
    Android 动态设置控件宽高度
  • 原文地址:https://www.cnblogs.com/RR-99/p/10451289.html
Copyright © 2011-2022 走看看