圆月山庄资源网 Design By www.vgjia.com
本文实例讲述了Python实现的knn算法。分享给大家供大家参考,具体如下:
代码参考机器学习实战那本书:
机器学习实战 (Peter Harrington著) 中文版
机器学习实战 (Peter Harrington著) 英文原版[附源代码]
有兴趣你们可以去了解下
具体代码:
# -*- coding:utf-8 -*- #! python2 ''''' @author:zhoumeixu createdate:2015年8月27日 ''' #np.zeros((4,2)) #np.zeros(8).reshape(4,2) #x=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) np.zeros_like(x) # 最值和排序:最值有np.max(),np.min() 他们都有axis和out(输出)参数, # 而通过np.argmax(), np.argmin()可以得到取得最大或最小值时的 下标。 # 排序通过np.sort(), 而np.argsort()得到的是排序后的数据原来位置的下标 # 简单实现knn算法的基本思路 import numpy as np import operator #运算符操作包 from _ctypes import Array from statsmodels.sandbox.regression.kernridgeregress_class import plt_closeall def createDataSet(): group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels=['A','A','B','B'] return group ,labels group,labels=createDataSet() def classify0(inx,dataSet,labels,k): dataSetSize=dataSet.shape[0] diffMat=np.tile(inx,(dataSetSize,1))-dataSet sqDiffMat=diffMat**2 sqDistances=sqDiffMat.sum(axis=1) distances=sqDistances**0.5 #计算距离 python中会自动广播的形式 sortedDistIndicies=distances.argsort() #排序,得到原来数据的在原来所在的下标 classCount={} for i in range(k): voteIlabel=labels[sortedDistIndicies[i]] # 计算距离最近的值所在label标签 classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 # 计算距离最近的值所在label标签,对前k哥最近数据进行累加 sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True) #排序得到距离k个最近的数所在的标签 return sortedClassCount[0][0] if __name__=='__main__': print(classify0([0,0],group,labels,4)) # 利用knn算法改进约会网站的配对效果 def file2matrix(filename): fr=open(filename) arrayOLines=fr.readlines() numberOfLines=len(arrayOLines) returnMat=np.zeros((numberOfLines,3)) classLabelVector=[] index=0 for line in arrayOLines: line=line.strip() listFromLine=line.split('\t') returnMat[index,:]=listFromLine[0:3] classLabelVector.append(int(listFromLine[-1])) index+=1 return returnMat ,classLabelVector #生成训练数据的array和目标array path=u'D:\\Users\\zhoumeixu204\\Desktop\\python语言机器学习\\机器学习实战代码 python\\机器学习实战代码\\machinelearninginaction\\Ch02\\' datingDataMat,datingLabels=file2matrix(path+'datingTestSet2.txt') import matplotlib import matplotlib.pyplot as plt fig=plt.figure() ax=fig.add_subplot(111) ax.scatter(datingDataMat[:,1],datingDataMat[:,2]) plt.show() ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*np.array(datingLabels),15*np.array(datingDataMat[:,2])) plt.show() #生成训练数据的array和目标array def autoNorm(dataset): minVals=dataset.min(0) maxVals=dataset.max(0) ranges=maxVals-minVals normeDataSet=np.zeros(np.shape(dataset)) m=dataset.shape[0] normDataSet=dataset-np.tile(minVals,(m,1)) normDataSet=normDataSet/np.tile(ranges,(m,1)) return normDataSet ,ranges,minVals normMat,ranges,minVals=autoNorm(datingDataMat) def datingClassTest(): hoRatio=0.1 datingDataMat,datingLabels=file2matrix(path+'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 rare is :%f"%(errorCount/float(numTestVecs)) #利用knn算法测试错误率 if __name__=='__main__': datingClassTest() #利用构建好的模型进行预测 def classifyPerson(): resultList=['not at all','in same doses','in large d oses'] percentTats=float(raw_input("percentage if time spent playin cideo games:")) ffMiles=float(raw_input("frequnet fliter miles earned per year:")) iceCream=float(raw_input("liters of ice cream consumed per year:")) datingDataMat,datingLabels=file2matrix(path+'datingTestSet2.txt') normMat,ranges,minVals=autoNorm(datingDataMat) inArr=np.array([ffMiles,percentTats,iceCream]) classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3) print("you will probably like the person:",resultList[classifierResult-1]) if __name__!='__main__': classifyPerson() #利用knn算法进行手写识别系统验证 path=u'D:\\Users\\zhoumeixu204\\Desktop\\python语言机器学习\\机器学习实战代码 python\\机器学习实战代码\\machinelearninginaction\\Ch02\\' def img2vector(filename): returnVect=np.zeros((1,1024)) fr=open(filename) for i in range(32): lineStr=fr.readline() for j in range(32): returnVect[0,32*i+j]=int(lineStr[j]) return returnVect testVector=img2vector(path+'testDigits\\0_13.txt') print(testVector[0,0:31]) import os def handwritingClassTest(): hwLabels=[] trainingFileList=os.listdir(path+'trainingDigits') m=len(trainingFileList) trainingMat=np.zeros((m,1024)) for i in range(m): fileNameStr=trainingFileList[i] fileStr=fileNameStr.split('.')[0] classNumStr=int(fileStr.split('_')[0]) hwLabels.append(classNumStr) trainingMat[i,:]=img2vector(path+'trainingDigits\\'+fileNameStr) testFileList=os.listdir(path+'testDigits') errorCount=0.0 mTest=len(testFileList) for j in range(mTest): fileNameStr=testFileList[j] fileStr=fileNameStr.split('.')[0] classNumStr=int(fileNameStr.split('_')[0]) classNumStr=int(fileStr.split('_')[0]) vectorUnderTest=img2vector(path+'testDigits\\'+fileNameStr) classifierResult=classify0(vectorUnderTest,trainingMat,hwLabels,3) print("the classifier canme back with:%d,the real answer is :%d"%(classifierResult,classNumStr)) if classifierResult!=classNumStr: errorCount+=1.0 print("\nthe total number of errors is :%d"%errorCount) print("\n the total error rate is :%f"%(errorCount/float(mTest))) if __name__=='__main__': handwritingClassTest()
运行结果如下图:
注:这里使用到了statsmodels模块,可以点击此处本站下载statsmodels安装模块,再进入statsmodels模块所在目录位置,使用:
pip install statsmodels-0.9.0-cp27-none-win32.whl
进行statsmodels模块的安装
同理,出现ImportError: No module named pandas错误提示时,点击此处本站下载pandas模块,再使用
pip install pandas-0.23.1-cp27-none-win32.whl
进行pandas模块的安装
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
标签:
Python,knn算法
圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com
暂无评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2024年11月07日
2024年11月07日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]