python实现KNN算法

用python实现KNN算法

算法设计
在使用自带的sklearn实现knn算法时,需要先引入sklearn包中的类,继而再取得knn分类器,使用内置函数调整knn的要素(邻居个数,分类决策规则),,使用fit()对训练集进行训练,调用knn.predict()去预测新输入的类别,调用knn.score()计算预测的准确率。
在使用原生python实现KNN算法时,首先要解决的问题就是计算输入x与训练集各点的距离distance,根据距离排序,取出距离最小的k个点,其次要对新的数据点做出预测,此时类比knn分类器,就需要我们自己定义一个分类器,来对数据点进行分类,x归为多数类。在计算distance时,选择numpy数组可以让程序运算更简洁。
自定义KNN分类器:定义函数KNNClassify(),其中包含的参数应包含newInput:新输入的待分类数据(x_test),dataset:输入的训练数据集(x_train),lables:输入训练集对应的类别标签(y_train),k:近邻数,weight:决策规则。第一步要做的内容时计算分类数据与训练集各数据点的欧式距离。使用numpy的title函数将newInput在列方向上重复1次,行方向重复numSamples次并减去输入的训练数据集,由此求出距离差值,再将该值平方后累加求和。 distance = (squaredist.sum(axis=1)) ** 0.5 其中 axis=1表示按行累加。第二步就是将距离按升序排序,并取距离最近的k个近邻点。使用argsort()方法实现。定义一个空字典,用来存放k个近邻的分类计数。在计数方法上,选择多数表决法或加权表决法。使用for循环求出第i个近邻点在distance数组中的索引,对应的分类。对k个近邻点的分类按降序排序,返回票数最多的分类结果。根据不同的计数法输出对应分类结果。
接下来建立训练集、测试集。将下载好的数据集新建文件,通过pandas的read_csv()来读取数据文件。使用pandas的head( m )函数来读取前m条数据,如果没有参数m,默认读取前五条数据。iloc函数,基于索引位来选取数据集,这里是前闭后开集合。np.random.permutation(len(iris_x))将鸢尾花的长度数据打乱。选取鸢尾花的数据集,测试集,将dataframe格式的数据转换为numpy array格式,便于 调用函数计算,将labels的形状设置为(130,)

源代码:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值