我是靠谱客的博主 害怕小丸子,最近开发中收集的这篇文章主要介绍机器学习-分类器算法-kNN一.分类器算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 首先,机器学习有众多算法,监督,无监督,聚类,回归......,初学者看到这么多的算法想必跟我一样头都晕了,到底在处理实际问题时候要怎么从这么多的算法中选择一个适合自己问题的方法,那么我们就对它们简单的归一下类,根据我们实际中的使用目的,可以得出下面的导图,举例说明,如果我现在需要预测一个地区的房价,那么按下图的指示,我们应该选择一个监督学习模型,那么我们再来看下一步,我们的目标变量房价显然是一个连续值,那么我们就需要找一个回归算法对我们的数据进行预测。

    但是我们需要清楚的是,根据下面的图,我们只能在一定程度上缩小算法的选择范围,一般并不存在最好的算法或者可以给出最好结果的算法,同时还要尝试不同算法的执行效果,一般来说,对于所选的每种算法,都可以使用其他的机器学习技术改进其性能,发现好算法的关键环节是反复试错的迭代过程,机器学习算法虽然很多,但是使用算法创建应用程序的步骤却基本类似,这一部分将在后面进行详细介绍。

一.分类器算法

       机器学习的一个主要任务就是分类,它通过分析未分类数据,以确定如何将其放入已知群组,根据上面的导图,分类方法属于一种监督学习算法,这类算法必须要知道目标变量的类别信息,对于分类和聚类,虽然只差一个字,但是其处理的问题是不同的,让我们再来看上面的导图,聚类算法属于无监督学习,此时的数据是没有类别信息的,也不会给定目标值,只是根据数据内部的特征将特征相似的数据划分为同一类。而分类算法通常会事先给定目标数据的类别信息,将给定数据划分为相应的类别。

       对于首先需要做的就是算法训练,也就是让计算机学习如何分类,通常我们为算法输入大量已分类数据作为算法的训练集,通过一定的学习规则,学习出优秀的分类方式,为了测试学习算法的效果,我们通常还会有测试数据集,输入测试样本时并不提供测试样本的目标变量,由之前学习得到的分类算法给出测试样本属于那个类别。

1.1 K-近邻算法(KNN)

    1.1.1 算法概述

    简单来说,k-近邻算法采用测量不同特征值之间的距离的方法进行分类。它的工作原理是:存在一个样本数据集合(训练样本),且样本集每个数据都存在标签,也就是说,仅仅看样本数据集,我们可以清楚地知道每一个数据分别属于哪一个类别,在输入没有标签的新数据后,通过将新数据的每个特征与样本集数据对应的特征进行比较,我们选择样本数据集中前k个最相似的数据(一般k<=20),最后选择这k个最相似数据中出现次数最多的分类,作为新数据的分类。



根据上面图我们可以看到使用KNN算法时,通过比较未知分类的数据特征与一只样本数据特征之间的距离,找到前k个距离最近的样本,例子中为E,D,B;再看这k个样本数据分别属于哪一类,在哪一类的数据越多,就说明这个未知分类的数据更有可能是该类别。

        因此,可以总结出k-近邻方法实现的一般流程为:

(1)收集数据:爬虫,RSS,标准数据集

(2)准备数据:距离计算所需要的数值

(3)分析数据

(4)测试算法

(5)使用算法:输入样本数据和结构化输出结果,运行k-近邻算法判定输入数据分别属于哪个分类

1.1.2 实战练习

首先,需要导入两个模块:numpy和operator模块

numpy模块:numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。

operator模块:这个模块提供了一系列的函数操作,eg.operator.add(x,y)等于x+y

from numpy import *
import operator
def createDataSet():
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels
上面的createDataSet()函数,用于创建数据集合标签,在终端进入python交互式开发环境,输入:

>>>import kNN
上面的命令导入了kNN模块,因此,就可以创建数据和标签信息

>>>group,labels=kNN.createDataSet()
>>>group
array([[1.,1.1],[1.,1.],[0.,0.],[0.,0.1]])
>>>labels
['A','A','B','B']
这里有4组数据,每组数据有两个我们已知的group属性或特征值,向量label包含了每个数据点的标签信息,这里我们将[1,1.1]定义为A类,[0,0.1]定义为B类。

下面我们是用kNN算法为每组数据分类,定义classify()函数是用kNN算法将每组数据划分到某个类中:

def classify(inX,dataset,labels,k):
dataSetSize=dataset.shape[0];#得到dataset的第一围大小
diffMat=tile(inX,(dataSetSize,1))-dataSet#将inX扩展为与dataset行数相同的矩阵
sqDiffMat=diffMat**2#(inX-dataset).^2
sqDistances=sqDiffMat.sum(axis=1)#sqDistances每一行自身相加
distances=sqDistances**0.5#对距离开根号
sortedDistIndicies=distances.argsort()#返回距离数组从小到大的索引值
classCount={}
for i in range(k):
votelabel=labels[sortedDistIndicies[i]]#取距离最小的前k个索引
classCount[votelabel]=classCount.get(votelabel,0)+1
sortedClassCount=sorted(classCount.iteritems(),key=operate.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
测试:
>>>kNN.classify([1,1],group,labels,3)
得到结果‘A’





  参考文献:《机器学习实战》

最后

以上就是害怕小丸子为你收集整理的机器学习-分类器算法-kNN一.分类器算法的全部内容,希望文章能够帮你解决机器学习-分类器算法-kNN一.分类器算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部