机器学习:K-NN分类

一、定义

        1、K-NN分类全称为K近邻法(k-nearest neighbor),是一种基本回归与分类方法:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最近的k个实例,这k个实例中多数实例属于某一类,就把该输入实例分为这一类。

        2、好比说,你周围的同学大都是些好学生,你也会被认为是好学生;你周围大都是些混混,那你也会被认为是混混。(其实这只是一种误解哈哈哈)


二、解决什么问题?

        1、根据已有的分类情况,对未知类型的数据进行分类。

        2、举个例子

        机器学习:K-NN分类_第1张图片

            这是一些球员的职业生涯数据,其中包括场均得分和场均助攻,大家知道现在的控卫和传统控卫有很多不同,现在的控卫进攻能力更强,而传统控卫更偏向于组织串联球队。两种风格的控卫在数据上有很明显的区别,得分型控卫得分更高,传统控卫助攻更多,而一些身材高大的控卫比如西蒙斯、鲍尔则更加全面,此处就不涉及讨论。那么对于林书豪来说,针对他的数据就不好一眼看出他是哪种类型的控卫,这里我们就可以用k-近邻算法进行分类。


三、具体步骤

        度量球员与球员之间的距离最明显的就是直接对比球员之间各个数据的差值,比如球员A场均20+10,球员B场均19+9,那么就认为这两个球员及其相似了。而我们所要计算的就是球员之间,各个数据的差值的总和,计算差值的方式很多种。

        1、导入球员数据,将球员的数据和分类记为:[场均得分,场均助攻,类型]

                    

        2、计算欧式距离(令A为已知类型球员A,B为待分类球员B),其中X上标i是球员的各类数据:

                   机器学习:K-NN分类_第2张图片

        3、重复2,将每个已知分类球员与待分类球员的距离求出

        4、求出所有距离后,做一次排序,取距离最近的K个球员,统计这K个球员的类型,其中类型最多的,就把这个类型当做是待分类球员的类型


四、Python实现

        1、先看数据,格式为csv

            机器学习:K-NN分类_第3张图片

        2、导入数据

           

            机器学习:K-NN分类_第4张图片

        3、计算距离

        机器学习:K-NN分类_第5张图片

        欧式距离,注意数据类型

        

        4、分类

        机器学习:K-NN分类_第6张图片

        5、运行效果

        机器学习:K-NN分类_第7张图片


五、拓展

        1、通俗来说,K-NN算法让被测目标去寻找它的同类,这个同类的判断依据就是,比较的两个对象,它们的各个属性(特征)的差别总和。取到与被测对象差别最小的K个对象,这K个对象中,绝大部分应该是属于同一类的,如果这K个对象所属的类别不符合这个规律,那么要考虑K值的选取以及比较的属性(特征)是否真正能反应不同类别之间的差距。

        2、K值的选取

            K值的选取会对结果产生重大影响,当K值较小时,学习的近似误差会减小,只有与输入实例较近的训练实例才会对预测结果起作用,但学习的估计误差会增大,预测结果对近邻的实例点非常敏感。K的减小会使整体模型变得复杂,容易发生过拟合。

            K值较大时,估计误差减小,近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,使预测错误。K值增大意味着整体模型变得简单。

            实际应用中,K值一般取一个比较小的值

        3、距离公式除欧式以外还有很多,这是曼哈顿距离

            机器学习:K-NN分类_第8张图片

        

        

           

你可能感兴趣的:(机器学习)