机器学习-- 入门demo1 k临近算法

一、k-近邻法简介

 

k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法。html

它的工做原理是:存在一个样本数据集合,也称做为训练样本集,而且样本集中每一个数据都存在标签,即咱们知道样本集中每个数据与所属分类的对应关系。算法

输入没有标签的新数据后,将新的数据的每一个特征与样本集中数据对应的特征进行比较,而后算法提取样本最类似数据(最近邻)的分类标签。ui

通常来讲,咱们只选择样本数据集中前k个最类似的数据,这就是k-近邻算法中k的出处,一般k是不大于20的整数。spa

最后,选择k个最类似数据中出现次数最多的分类,做为新数据的分类。.net

 

 

 

二、距离度量

咱们已经知道k-近邻算法根据特征比较,而后提取样本集中特征最类似数据(最邻近)的分类标签。3d

那么,如何进行比较呢?好比,咱们仍是以表1.1为例,怎么判断红色圆点标记的电影所属的类别呢? 以下图所示。rest

 

 

 

咱们能够从散点图大体推断,这个红色圆点标记的电影可能属于动做片,由于距离已知的那两个动做片的圆点更近。code

k-近邻算法用什么方法进行判断呢?没错,就是距离度量。这个电影分类的例子有2个特征,也就是在2维实数向量空间,htm

可使用咱们高中学过的两点距离公式计算距离,如图1.2所示。blog

 

 

 

 

经过计算可知,红色圆点标记的电影到动做片 (108,5)的距离最近,为16.55。

若是算法直接根据这个结果,判断该红色圆点标记的电影为动做片,这个算法就是最近邻算法,

而非k-近邻算法。那么k-近邻算法是什么呢?k-近邻算法步骤以下:

  1. 计算已知类别数据集中的点与当前点之间的距离;
  2. 按照距离递增次序排序;
  3. 选取与当前点距离最小的k个点;
  4. 肯定前k个点所在类别的出现频率;
  5. 返回前k个点所出现频率最高的类别做为当前点的预测分类。

好比,如今我这个k值取3,那么在电影例子中,按距离依次排序的三个点分别是动做片(108,5)、动做片(115,8)、爱情片(5,89)。

在这三个点中,动做片出现的频率为三分之二,爱情片出现的频率为三分之一,因此该红色圆点标记的电影为动做片。这个判别过程就是k-近邻算法。

 

 

 

 

三、Python3代码实现

 

(1) 准备数据集合

 

对于表1.1中的数据,咱们可使用numpy直接建立,代码以下:

 

 结果以下

 

 

(2)k-近邻算法

根据两点距离公式,计算距离,选择距离最小的前k个点,并返回分类结果。

 

输出结果:

group [[  1 101]
 [  5  89]
 [108   5]
 [115   8]]
labels ['爱情片', '爱情片', '动做片', '动做片']
datasetsize 4
diffmat  [[100 -81]
 [ 96 -69]
 [ -7  15]
 [-14  12]]
sqdiffmat [[10000  6561]
 [ 9216  4761]
 [   49   225]
 [  196   144]]
sqdistances [16561 13977   274   340]
distances [ 128.68954892  118.22436297   16.55294536   18.43908891]
sortedDistIndices [2 3 1 0]
 voteIlabel 0 动做片
classCount[voteIlabel]  1
 voteIlabel 1 动做片
classCount[voteIlabel]  2
 voteIlabel 2 爱情片
classCount[voteIlabel]  1
sortedClassCount [('动做片', 2), ('爱情片', 1)]
动做片

 

 

由 模型可知, 当数据为[101,20]  ,数据数据可能为动做片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考资料

https://cuijiahua.com/blog/2017/11/ml_1_knn.html

https://www.cnblogs.com/bonelee/p/8036024.html

https://blog.csdn.net/u011475210/article/details/77770751

相关文章
相关标签/搜索