【机器学习】k近邻算法-02
k邻近算法具体应用:2-2约会网站配对
心得体会:
1.对所有特征值进行归一化处理:将特征值单位带来的距离影响消除,使所有特征同权重——然后对不同的特征进行加权
2.对于相互独立的特征,可以通过建立(特征值—类型 )图表进行计算,但是多个特征值是相互关联的则需要建立多维图表
#2-2约会网站配对 #将文本记录转换为NumPy def file2matrix(filename): love_dictionary = {'largeDoses':3, 'smallDoses':2, 'didntLike':1} fr = open(filename) #打开文件 arrayOLines = fr.readlines() #行组成的数组 numberOfLines = len(arrayOLines) #返回数组元素个数 returnMat = zeros((numberOfLines, 3)) #生成numberOfLines*3的0数组 classLabelVector = [] #数组 index = 0 for line in arrayOLines: line = line.strip() #除去头尾空格 listFromLine = line.split('\t') #按'\t'分割成数组 returnMat[index, :] = listFromLine[0:3] #从0开始截取3个 if(listFromLine[-1].isdigit()): classLabelVector.append(int(listFromLine[-1])) #是数字就放数字,存入类型 else: classLabelVector.append(love_dictionary.get(listFromLine[-1])) #是字符串就转成数字,存入类型 index += 1 return returnMat, classLabelVector import matplotlib import matplotlib.pyplot as plt fig = plt.figure() #返回一个图像窗口 ax = fig.add_subplot(111) #在1行1列1号位画子图 datingDataMat,datingLabels=file2matrix("E:/Python/《机器学习实战》代码/Ch02/datingTestSet2.txt") # print(datingLabels) # ax.scatter(datingDataMat[:,1], datingDataMat[:,2]) #scatter(x, y, 点的大小, 颜色,标记) ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*array(datingLabels),15.0*array(datingLabels),"*") ax.axis([-2,25,-0.2,2.0]) #[x轴min,x轴max,y轴min,y轴max] plt.xlabel('game') plt.ylabel('ice') # plt.show() # 归一化特征值 # newVal=(oldVal-minVal)/(maxVal-minVal) def autoNorm(dataSet): minVals=dataSet.min(0) #得到每一列的最小值(列1min,列2min,列3min) maxVals=dataSet.max(0) #得到每一列的最大值 ranges=maxVals-minVals normDataSet=zeros(shape(dataSet))# 建立一个和dataSet一样大小的0矩阵 m=dataSet.shape[0] normDataSet=dataSet-tile(minVals,(m,1))# tile建立矩阵tile(重复的内容,(在高度上重复,在长度上重复)) normDataSet=normDataSet/tile(ranges,(m,1)) return normDataSet,ranges,minVals normMat,ranges,minVals=autoNorm(datingDataMat) #分类器 def datingClassTest(): hoRatio=0.10 #0.1的数据作为测试 datingDataMat,datingLabels=file2matrix("E:/Python/《机器学习实战》代码/Ch02/datingTestSet2.txt") normMat,ranges,minVals=autoNorm(datingDataMat)#归一化的特征值,特征值原本范围,特征值最小值 m=normMat.shape[0] numTestVecs=int(m*hoRatio)#测试数据的数量 errorCount=0.0 for i in range(numTestVecs): classifierResult=classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3) print("the classifier came back with:%d,the real answer is :%d"%(classifierResult,datingLabels[i])) if(classifierResult!=datingLabels[i]): errorCount+=1.0 print("The total error rate is :%f"%(errorCount/float(numTestVecs))) #约会网站预测函数 def classifyPerson(): resultList=['not at all','in small doses','in large doses'] percentTats=float(input("游戏时间百分比")) ffMiles=float(input("每年飞行常客里程数")) iceCream=float(input("每年吃冰淇淋多少升")) datingDataMat,datingLabels=file2matrix("E:/Python/《机器学习实战》代码/Ch02/datingTestSet2.txt") normMat,ranges,minVals=autoNorm(datingDataMat) inArr=array([ffMiles,percentTats,iceCream]) classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3) print(resultList[classifierResult-1]) # classifyPerson()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix