zoukankan      html  css  js  c++  java
  • KNN算法简介及使用sklearn简单实现

    一.KNN算法介绍

      近朱者赤,近墨者黑

         k近邻(K-Nearest Neighbor,简称KNN)学习是一种常用的监督学习算法,其工作机制非常简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测

       思考点:1.是一种监督学习算法,常用作处理分类问题,但也可用于处理回归问题

           2.基于某种距离度量,这里的距离有很多种,具体使用时怎么确定使用哪一种距离?

            最常用的是欧式距离,即普遍意义中空间里两点的直线距离:

            

           3.KNN中K的含义是寻找的最近邻居的数量,是一个超参数,如何确定?

           4.怎么高效率,低成本找出最近的K个样本?

           5.不同属性对距离的贡献权重

              5.1 由于不同属性往往有不同的取值空间,所以会对距离计算产生不同的贡献权重,此时可以对数据进行归一化,但归一化方法也有多种,如何选择?

              5.2 每个属性对距离的贡献权重都一样吗?如何确定每个属性的最优权重?

           6.距离不同的邻居对最终结果的贡献权重

            最近的邻居和第K个近的邻居对最终结果的贡献权重一样吗?如何确定不同距离邻居的贡献权重?

               

    二.KNN算法的特点

      1. 原理非常简单,易于理解

        2. 训练时间为零,只是把样本保存起来,没有显示训练过程,是一种典型的懒惰学习(lazy learning),基于实例的学习

        3. 特别适合多分类问题(multi-model,对象具有多个类别标签),KNN比SVM的表现要好

        4. 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感

        5. 计算量巨大,时间复杂度高,空间复杂度高

        6. 样本不平衡时,对稀有类别的预测准确率低

        7. 非常依赖训练数据的准确性

    三.KNN算法的代码实现

      1.分类

        clf = neighbors.KNeighborsClassifier(n_neighbors, weights=weights)

        

       2.回归

        knn = neighbors.KNeighborsRegressor(n_neighbors, weights=weights)

     

     

       3.重要参数解释

        1. n_neighbors(default = 5) : K值

          2. weights(default = uniform) : 权重,通常有三种方式:

            2.1 ‘uniform’  众生平等

            2.2 ‘distance’ 距离与权重成反比

            2.3 自定义

                    3. algorithm(default = auto) : 寻找最近K个样本的算法

            3.1 ‘brute’: 暴力搜索

            3.2 'kd_tree': KD树

            3.3 ‘ball_tree’ : 球树

            3.4 ‘auto’ 自动选择合适的算法

        

  • 相关阅读:
    AIX中设备管理
    重置Brocade光纤交换机的管理IP地址
    博科 5300 光纤交换机配置 备份和恢复
    博科 5300 光纤交换机配置
    博科光纤交换机常用指令
    RHEL6使用系统自带多路径软件配置多路径
    Linux使用storcli工具查看服务器硬盘和raid组信息
    Linux文件管理
    Linux目录管理
    前端开发JS——jQuery常用方法
  • 原文地址:https://www.cnblogs.com/JINJAY/p/13092605.html
Copyright © 2011-2022 走看看