• K近邻--KNN


    K近邻--KNN

    KNN算法

    KNN是选择距离最近的几个样本,做分类或者回归。分类时,选择多数表决法,回归时,一般选择平均值法。

    1. KNN三要素

      1)K的选择:可通过交叉验证法寻找合适的K

      2)距离度量:

      对于两个n维向量x和y,两者的欧式距离、曼哈顿距离和闵可斯基距离定义如下:

      [D(x,y)=sqrt{(x_1-y1)^2+(x_2-y_2)^2+...+(x_n-y_n)^2}=sqrt{sum_{i=1}^n(x_i-y_i)^2}qquad欧式距离\ D(x,y)=lvert x_1-y_1 vert+lvert x_2-y_2 vert+...+lvert x_n-y_n vert=sum_{i=1}^nlvert x_i-y_i vertqquad曼哈顿距离\ D(x,y)=sqrt[p]{(|x_1-y1|)^p+(|x_2-y_2|)^p+...+(|x_n-y_n|)^p}=sqrt[p]{sum_{i=1}^n(|x_i-y_i|)^p}qquad闵可斯基距离 ]

      3)分类决策规则:一般使用多数表决法

    2. KNN算法的实现

      如果使用爆力求解的方式,要计算目标与每个样本的距离,代价是非常大的。所以采用KD树、球树的方式实现。

      1)KD树,就是K个特征的树,先对训练集进行建模,从n个特征中取方差最大的k个作为根节点,取中位数作为样本划分点,递归此过程,直到结束。

      2)球树(略)

    KNN总结

    KNN优点:

    1. 理论成熟,思想简单,可做分类和回归
    2. 可用于非线性分类
    3. 训练时间复杂度比SVM算法低,仅为O(n)
    4. 与朴素贝叶斯比,对数据没有假设,准确率高,对异常点不敏感
    5. 对类域的交叉或重叠较多的样本,KNN也比较适合
    6. 比较适用于样本容量比较大的类域

    KNN缺点:

    1. 计算量大
    2. 样本不平衡时,准确率低
    3. KD树、球树需要大量内存
    4. 基本不学习,预测速度慢
    5. 可解释性不强

    scikit-learn K近邻算法库

    1. 相关类库

      主要的类在sklearn.neighbors包中,KNeighborsClassfier分类和KNeighborsRegressor回归

    2. 主要参数

      1)n_neighbors:选择的K值

      2)weights:近邻样本权重

      3)metric:距离度量

    3. 实现例子

      from sklearn.neighbors import KNeighborsClassifier
      clf = KNeighborsClassifier(n_neighbors=15, weights='distance')
      clf.fit(X,y)
      
  • 相关阅读:
    CSDN博客频道维护公告
    JavaScript高级编程II
    ORACLE触发器具体解释
    下拉刷新和上拉载入的原理
    在遍历中使用 iterator/reverse_iterator 进行 Erase 的使用方法
    python解析Yahoo的XML格式的天气预报,获取当天和近期几天的天气:
    CheckBoxPreference组件
    Java中Integer类的方法
    TFS(Team Foundation Server)介绍和入门
    电脑报2014年第43期 pdf高清版
  • 原文地址:https://www.cnblogs.com/guesswhy/p/12882703.html
Copyright © 2020-2023  润新知