__author__ = '糖衣豆豆'
from numpy import *
from os import listdir
import operator
#从列方向扩展
#tile(a,(size,1))
#实现KNN算法,需要指定k,需要测试数据集,需要训练数据集,类别名(标签),
def knn(k,testdata,traindata,labels):
#通过shape获得行数
traindatasize=traindata.shape[0]
#扩展testdata的维数,tile函数可以扩展testdata和traindata相同的行数,然后和traindata的向量相减计算测试机和训练集的差值
dif=tile(testdata,(traindatasize,1))-traindata
#计算差值的平方
sqdif=dif**2
#计算平方和,每一行的各列求和,axis=1每一行的各列求和
sumsqdif=sqdif.sum(axis=1)
#开方
distance=sumsqdif**0.5
#排序
sortdistance=distance.argsort()
#空字典
count={}
#选择距离最短的k
for i in range(0,k):
#获取类别,下标决定属于哪一类
vote=labels[sortdistance[i]]
#整理为一定格式,得到类别vote,每出现一次统计一次
count[vote]=count.get(vote,0)+1
#取出最多的类别,reverse=True表示降序
sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
return sortcount[0][0] #图片处理
#先将图片转为固定宽高,比如32*32,然后再转为文本
'''
from PIL import Image
im=Image.open("~/Downloads/123.png")
fh=open("~/Downloads/123_txt","a")
width=im.size[0]
height=im.size[1]
#k=im.getpixel((1,9))
#print(k)
for i in range(0,width):
for j in range(0,height):
cl=im.getpixel((i,j))
clall=cl[0]+cl[1]+cl[2]
if(clall==0):
#黑色
fh.write("1")
else:
fh.write("0")
fh.write("\n")
fh.close()
''' #加载数据
#将数据转为数组
def datatoarray(fname):
arr=[]
fh=open(fname)
#图片是32*32的横轴每次读取32
for i in range(0,32):
thisline=fh.readline()
#读每一行
for j in range(0,32):
#读入到数组里
arr.append(int(thisline[j]))
return arr
arr1=datatoarray("~/coding/python/data/testandtraindata/testdata/0_74.txt")
#print(arr1)
#建立一个函数,取文件的前缀
def seplabel(fname):
filestr=fname.split(".")[0]
label=int(filestr.split("_")[0])
return label
#建立训练数据
def traindata():
#存储类别
labels=[]
#得到训练目录下所有的文件
trainfile=listdir("~/coding/python/data/testandtraindata/traindata")
#取当前文件有多少个
num=len(trainfile)
#生成一个多少行多少列的向量,行的长度应该是32*32=1024(列),每一行存储一个文件
#用一个数组存储所有训练数据,行:文件总数,列:1024
trainarr=zeros((num,1024))
#第一层循环文件
for i in range(0,num):
thisfname=trainfile[i]
#调用seplabel函数
thislabel=seplabel(thisfname)
#存到数组里
labels.append(thislabel)
#调用datatoarray函数,i,:处理重复读取
trainarr[i,:]=datatoarray("~/coding/python/data/testandtraindata/traindata/"+thisfname)
return trainarr,labels
#用测试数据条用KNN算法去测试,看是否能够准确识别
def datatest():
trainarr,labels=traindata()
testlist=listdir("~/coding/python/data/testandtraindata/testdata")
tnum=len(testlist)
for i in range(0,tnum):
thistestfile=testlist[i]
testarr=datatoarray("~/coding/python/data/testandtraindata/testdata/"+thistestfile)
rknn=knn(3,testarr,trainarr,labels)
print(rknn)
#a=datatest()
#print(a)
#抽某一个文件测试文件出来进行验证
trainarr,labels=traindata()
thistestfile="8_15.txt"
testarr=datatoarray("~/coding/python/data/testandtraindata/testdata/"+thistestfile)
rknn=knn(3,testarr,trainarr,labels)
print(rknn)

Python简单实现KNN算法的更多相关文章

  1. 使用python模拟实现KNN算法

    一.KNN简介 1.KNN算法也称为K邻近算法,是数据挖掘分类技术之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. 2.KNN算法的核心思想是如果一个样本 ...

  2. python最近邻分类器KNN算法

    1. KNN算法 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最 ...

  3. python 实现简单的KNN算法

    from numpy import * import operator def createDataSet(): group = array([[3,104],[2,100],[1,81],[101, ...

  4. python实现简单分类knn算法

    原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...

  5. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  6. 算法代码[置顶] 机器学习实战之KNN算法详解

    改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...

  7. 运用kNN算法识别潜在续费商家

    背景与目标 Youzan 是一家SAAS公司,服务于数百万商家,帮助互联网时代的生意人私有化顾客资产.拓展互联网客群.提高经营效率.现在,该公司希望能够从商家的交易数据中,挖掘出有强烈续费倾向的商家, ...

  8. 人工智能之KNN算法

    转载自:https://www.cnblogs.com/magic-girl/p/python-kNN.html 基于python实现的KNN算法 邻近算法(k-NearestNeighbor) 是机 ...

  9. KNN算法java实现代码注释

    K近邻算法思想非常简单,总结起来就是根据某种距离度量检测未知数据与已知数据的距离,统计其中距离最近的k个已知数据的类别,以多数投票的形式确定未知数据的类别. 一直想自己实现knn的java实现,但限于 ...

随机推荐

  1. Django---项目

    1.项目介绍 2.前期项目配置 3.用户注册---用户类创建和短信验证码的功能实现

  2. H3C交换机引发的奇葩故障

    设备:H3C S5120-28P-SI 故障:某个交换机的接口速率只有100Mbps. 描述:这个故障还是很特别的,因为按普通的测试办法很难第一时间判断是交换机的固件问题,我也是做了几乎所有外围设备和 ...

  3. Zepto源码分析之二(新旧版本zepto.Z方法的区别)

    在上一节中讲到Z()方法,是在初始化函数init中直接调用zepto.Z() zepto.Z = function(dom, selector) { dom = dom || [] dom.selec ...

  4. 设置和获取cookie

    通过make_response(“响应体”)创建response响应对象. 然后返回. 与直接return “响应体” 是一样的. 但是这里我们需要用到response响应对象,去设置cookie @ ...

  5. python模块与路径

    # 切记不能与方法函数同名,否则会报错!!! # python的模块与包 分为三种: #1.标准库 #2.第三方模块 #3.自定义模块 #python 模块的引入原理: # 加入你创建了一个模块,在i ...

  6. html5css练习 旋转

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  7. 【转】jenkins+gitlab配置遇到问题

    搭建jenkins+gitlab拉取代码失败,日志如下: ERROR: Error fetching remote repo 'origin'hudson.plugins.git.GitExcepti ...

  8. js 对url进行某个参数的删除,并返回url

    两种情况 1对当前页面的url进行操作 function funcUrlDel(name){ var loca = window.location; var baseUrl = loca.origin ...

  9. Eureka服务端源码流程梳理

    一.简述 spring cloud三步走,一导包,二依赖,三配置为我们简化了太多东西,以至于很多东西知其然不知其所以然,了解底层实现之后对于一些问题我们也可以快速的定位问题所在. spring clo ...

  10. WindowsService调用API

    本文着重于WindowsServic如何调用API以及出现部分问题的解决方案 本文Windows Service 创建摘自JasperXu的博客   链接:http://www.cnblogs.com ...