,,Python机器学习k-近邻算法(K Nearest Neighbor)实例详解

,,Python机器学习k-近邻算法(K Nearest Neighbor)实例详解

本文主要介绍了Python机器学习k-最近邻算法,并结合实例分析了k-最近邻算法的原理、操作步骤、相关实现和使用技巧。有需要的可以参考一下。

本文结合实例介绍了Python机器学习中的k-最近邻算法。分享给你,供你参考,如下:

工作原理

有一个训练样本集,每个样本都有自己的标签,也就是我们知道每个样本集所属的类别。无标签输入新数据后,将新数据的每个特征与样本集中数据的对应特征进行比较,然后提取样本集中与其最接近的K个样本。观察这K个样本的标签,选择编号最大的标签作为这个新数据的标签。

kNN算法可以用下图很好的解释:

不同形状的点是具有不同标签的点。其中绿点是未知标签的数据点。现在,我们需要预测绿点。从图中不难得出:

如果k=3,那么离绿点最近的有两个红色三角形和一个蓝色正方形。这三个点投票,所以要分类的绿点属于红三角。

如果k=5,那么离绿点最近的有两个红色三角形和三个蓝色正方形。这五个点投票,所以要分类的绿点属于蓝方块。

kNN算法实施

伪代码

对数据集中属性未知的每个点执行以下操作

1.计算已知类型类别数据集中的点与当前点之间的距离。

2.按距离递增的顺序排序。

3.选择与当前点距离最小的k个点。

4.确定前K个点所在类别的出现频率。

5.返回前k个点出现频率最高的类别作为当前点的预测分类。

欧式距离(计算两点之间的距离公式)

计算点X和点y之间欧几里得距离

python代码实现

# -*-编码:utf-8 -*-

#!python2

将numpy作为np导入

进口经营者

#训练集

data_set=np.array([[1。 1.1],

[1.0, 1.0],

[0. 0.],

[0, 0.1]])

labels=['A ',' A ',' B ',' B']

def classify_knn(in_vector,training_data,training_label,k):

'''

:param in_vector:要分类的向量

:param training_data:训练集向量

:param training_label:训练集标签

:param k:选择最近邻的数量。

:return:分类器对in_vector进行分类的类别。

'''

data _ size=training _ data . shape[0]#。shape [0]返回二维数组中的行数。

Diff _ mat=NP。Tile (in _ vector,(data _ size,1))-data _ set # NP。Tile (array,(3,2))将数组扩展32,成为一个二维数组。

sq_diff_mat=diff_mat ** 2

sq _ distances=sq _ diff _ mat . sum(axis=1)#。sum(轴=1)矩阵按列求和。

# distances=sq_distances ** 0.5 #主要是通过比较找到最近的点,所以不需要求平方根。

distances _ sorted _ index=sq _ distances . arg sort()#。argsort()对数组进行排序以返回排序后的索引。

Class_count_dict={} #用于统计类别的数量。

对于范围(k)中的I:

label=training _ label[distance _ sorted _ index[I]]

尝试:

class _ count _ dict[标签]=1

除了KeyError:

class _ count _ dict[标签]=1

class _ count _ dict=sorted(class _ count _ dict . item items(),key=operator.itemgetter (1),reverse=true) #按照字典的值对字典进行逆序排序。

返回class_count_dict[0][0]

if __name__=='__main__ ':

Vector=[0,0] #要分类的数据集

打印classify_knn(in_vector=vector,training_data=data_set,training_label=labels,k=3)

运行:b

算法评价

优点:准确率高,对异常值不敏感,无数据输入假设。

缺点:计算复杂度高,空间复杂度高。

数据范围:数据类型和名义类型。

适用:kNN方法通常用作更复杂的分类算法的一部分。例如,我们可以使用它的估计值作为对象的特征。有时,一个简单的kNN算法将在精选的特征上表现良好。

对更多Python相关内容感兴趣的读者可以查看我们的专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》和《Python文件与目录操作技巧汇总》。

希望本文对Python编程有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: