基本信息
源码名称:knn最近邻算法与数据集
源码大小:7.99M
文件格式:.zip
开发语言:Python
更新时间:2019-05-01
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
1.将图像进行灰度处理转换成数值矩阵 2.给出数据集进行训练 3.knn算法实战
inall是整个数据集,可以将它切分成训练集和测试集,建议取少量测试集
我利用8_48进行测试,(它是我从inall里取出来的,已经从里面被删掉了)
同时修改一下knn里的参数
# encoding=utf-8 from numpy import * import operator from os import listdir def knn(k,testdata,traindata,labels): #testdata:[特征1,特征2,特征3] #traindata:[[特征1,特征2,特征3],[特征1,特征2,特征3],[特征1,特征2,特征3]] traindatasize=traindata.shape[0] dif=tile(testdata,(traindatasize,1))-traindata sqdif=dif**2 #sumsqdif已经成为一维的了[a,b,c,d] sumsqdif=sqdif.sum(axis=1) distance=sumsqdif**0.5 sortdistance=distance.argsort() #sortdistance指的是测试数据与各训练数据的距离由近到远排序之后的结果列表 count={}#{"类别":"次数"} for i in range(0,k): vote=labels[sortdistance[i]]#当前距离的类别是谁(由近至远) count[vote]=count.get(vote,0) 1 #print(count) sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True) return sortcount[0][0] #数据加载,将数据转换成knn算法支持的向量。 def datatoarray(fname): arr=[] fh=open(fname) for i in range(0,90): #这个参数要修改 thisline=fh.readline() #这个也要 for j in range(0,47): arr.append(int(thisline[j])) return arr #a=datatoarray("D:/Python35/traindata/0_3.txt") #取文件名前缀(类别) def seplabel(fname): filestr=fname.split(".")[0] label=int(filestr.split("_")[0]) return label #建立训练数据 #labels:[类别,类别,类别,类别] #tainarr:[[特征1,特征2,特征3],[特征1,特征2,特征3],[特征1,特征2,特征3]] def traindata(): labels=[] #存放类别 trainfile=listdir("C:/Users/Ayui/Desktop/clus_img/inall/") #把文件夹打开并且把文件夹中所 # 有的文件名存放在列表中,为了最后放在datatoarray函数的arr里(那里面也是列表类型) num=len(trainfile) #列为1024,行为num的数组 trainarr=zeros((num,4230)) # { # [ # [ ] # [ ] # [ ] # [ ] num为行数,1024是每一行存放的特征数目 # ]} for i in range(0,num): thisname=trainfile[i] thislabel=seplabel(thisname) labels.append(thislabel) trainarr[i,:]=datatoarray("C:/Users/Ayui/Desktop/clus_img/inall/" thisname) return trainarr,labels trainarr,labels=traindata() thistestfile="8_48.txt" testarr=datatoarray(thistestfile) rst=knn(3,testarr,trainarr,labels) print("this writing's classify is",rst)