准备工作:1.如果已经import了KNN的包,那么可以把机器学习实战源代码中的KNN.py改成kn.py(源代码为Python2的,在Python3中需要加以修改)
2.把改好的kn.py放入你即将使用的Python的文件夹里(路径为:Python-Lib-site-package),不这样做的话,导入模块会一直出错
3.可以把机器学习实战这本书关于k近邻算法的部分看一遍,不懂的函数可以上网查一下
附:Python修改的代码
import numpy as np #导入numpy
import operator #运算符模块
#k-近邻算法
#计算距离
def classify0(inX,dataSet,labels,k):
dataSetSize=dataSet.shape[0] #shape读取数据矩阵第一维度的长度
diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet #tile重复数组inX,有dataSet行 1个dataSet列,减法计算差值
sqDiffMat=diffMat**2 #**是幂运算的意思,这里用的欧式距离
sqDisttances=sqDiffMat.sum(axis=1) #普通sum默认参数为axis=0为普通相加,axis=1为一行的行向量相加
distances=sqDisttances**0.5
sortedDistIndicies=distances.argsort() #argsort返回数值从小到大的索引值(数组索引0,1,2,3)
#选择距离最小的k个点
classCount={}
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]] #根据排序结果的索引值返回靠近的前k个标签
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #各个标签出现频率
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) #排序频率
#!!!!! classCount.iteritems()修改为classCount.items()
#sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list。
# reverse默认升序 key关键字排序itemgetter(1)按照第一维度排序(0,1,2,3)
return sortedClassCount[0][0] #找出频率最高的
#创建数据集

这篇博客主要介绍了如何在Python中实现K近邻算法,包括修改源代码以适应Python3环境,并将其放入Python库路径。建议读者先阅读《机器学习实战》中关于k近邻的内容,以更好地理解代码。通过在Spyder环境中运行代码,可以直观观察各变量的值,便于学习和理解算法。
&spm=1001.2101.3001.5002&articleId=80586797&d=1&t=3&u=25c93dfc8ea249308ce0d45c841062d5)
6862

被折叠的 条评论
为什么被折叠?



