python knn算法数据集和结果_knn最近邻算法与数据集

【实例简介】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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值