怎么在python中实现一个k近邻算法

  介绍

怎么在python中实现一个k近邻算法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>什么是资讯

资讯算法的模型就是整个训练数据集。当需要对一个未知数据实例进行预测时,然而,算法会在训练数据集中搜寻k个最相似实例。对k个最相似实例的属性进行归纳,将其作为对未知实例的预测。

相似性度量依赖于数据类型。对于实数,可以使用欧式距离来计算。其他类型的数据,如分类数据或二进制数据,可以用汉明距离。

对于回归问题,会返回k个最相似实例属性的平均值。对于分类问题,会返回k个最相似实例属性出现最多的属性。

<强>资讯如何工作

资讯属于基于实例算法簇的竞争学习和懒惰学习算法。

基于实例的算法运用数据实例(或数据行)对问题进行建模,进而做出预测决策.kNN算法算是基于实例方法的一种极端形式,因为其保留所有的训练集数据作为模型的一部分。

资讯是一个竞争学习算法,因为为了做出决策,模型内部元素(数据实例)需要互相竞争。数据实例之间客观相似度的计算,促使每个数据实例都希望在竞争中获“胜”或者尽可能地与给定的未知数据实例相似,继而在预测中做出贡献。

懒惰学习是指直到需要预测时算法才建立模型。它很懒,因为它只在最后一刻才开始工作。优点是只包含了与未知数据相关的数据,称之为局部模型。缺点是,在大型训练数据集中会重复相同或相似的搜索过程,带来昂贵的计算开销。

最后,资讯的强大之处在于它对数据不进行任何假设,除了任意两个数据实例之间距离的一致计算,因此,它被称为成为无参数或者非线性的,因为它没有预设的函数模型。

用python写程序真的好舒服。

import  numpy  as  np   def  read_data(文件名):   & # 39;才能& # 39;& # 39;读取文本数据,格式:特征1,,特征2,……,类别& # 39;& # 39;& # 39;   f=才能open (filename, & # 39; rt # 39;)   row_list才能=f.readlines(), #以每行作为列的表   f.close才能()   data_array才能=[]   labels_vector才能=[]   while 才能正确的:   ,,,if  not  row_list:   ,,,,,休息   ,,,行=row_list.pop (0) .strip () .split (& # 39; \ t # 39;), #去除换行号,分割制表符   ,,,temp_data_row=[浮动(a), for  a 拷贝行[:1]],#将字符型转换为浮点型   ,,,data_array.append (temp_data_row), #取特征值   ,,,labels_vector.append(行[1]),,#取最后一个作为类别标签   return 才能np.array (data_array) np.array (labels_vector)      def 分类(test_data、数据集、标签,k):   & # 39;才能& # 39;& # 39;分类& # 39;& # 39;& # 39;   ,,diff_dis_array=test_data-dataset  #使用numpy的广播   dis_array才能=(np.add.reduce (diff_dis_array * * 2,轴=1))* * 0.5,,#求距离   dis_array_index才能=np.argsort (dis_array),, #升序距离的索引   class_count才能={}   for 才能小姐:拷贝范围(k):   ,,,temp_label=标签(dis_array_index[我]]   ,,,class_count [temp_label]=class_count.get (temp_label,0) + 1, #获取类别及其次数的字典   sorted_class_count才能=排序(class_count.items(),,关键=lambda 项目:项目[1],反向=True),, #字典的值按降序排列   return 才能sorted_class_count[0][0],, #返回元组列表的[0][0]      def 正常化(数据):   & # 39;才能& # 39;& # 39;数据归一化& # 39;& # 39;& # 39;   return 才能;(dataset-dataset.min (0))/(dataset.max -dataset.min (0) (0))      k=3, #近邻数   test_data=https://www.yisu.com/zixun/(0,0) #待分类数据   数据、标签=read_data (“testdata.txt”)   打印(“数据集:/n,数据)   打印(“标签集:/n,标签)   结果=分类(test_data正常化(数据),标签,k)   打印(“分类结果:“,结果)

怎么在python中实现一个k近邻算法