博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
knn 数字识别
阅读量:4983 次
发布时间:2019-06-12

本文共 2256 字,大约阅读时间需要 7 分钟。

#knn介绍 更多参考百度介绍

 
算法思想:给定一个带标检的训练数据集(就是带分类结果的样本),对于一个新的输入实例,我们在训练数据集中以某种距离度量方式找出与该输入实例距离最近邻的k个实例。 找出这k个实例(这也是knn中k的含义)中类别出现最多的那个类别,最后我们就将该新的输入实例划分为此类别
import numpy as np# bmp 图片后缀import matplotlib.pyplot as pltfrom sklearn.neighbors import KNeighborsClassifierimg_path = './data/3/3_100.bmp'arr_img = plt.imread(img_path)arr_img.shape  #维度#特征必须是二维feature = [] #特征target = [] #目标数据for i in range(10):    for j in range(1,501):        #img_path = './data/'+str(i)+'/'+str(i)+'_'+str(j)+'.bmp'         #将图片数据读取到了numpy        img_arr = plt.imread('./data/%d/%d_%d.bmp'%(i,i,j))  #格式化替换        feature.append(img_arr)        target.append(i)#将列表转numpyfeature = np.array(feature)feature.shape  #发现feature是三维,必须变形成二维的才可以作为特征数据#获取了符合要求的特征数据(二维)feature = feature.reshape((5000,784))target = target#将样本集拆分成训练数据和测试数据np.random.seed(6)np.random.shuffle(feature)np.random.seed(6)np.random.shuffle(target)#训练数据x_train = feature[0:4950]y_train = target[0:4950]#测试数据x_test = feature[4950:]y_test = target[4950:]x_train.shape  #训练形状knn = KNeighborsClassifier(n_neighbors=15)knn.fit(x_train,y_train)  #试数据knn.score(x_test,y_test)  #评分print('模型分类结果:',knn.predict(x_test))print('真实分类:',y_test)

#下面测试一张新的照片

#获取外部的一张数字图片,让模型进行分类digist_img_arr = plt.imread('./数字.jpg')digist_img_arr.shapeplt.imshow(digist_img_arr)five_img_arr = digist_img_arr[95:150,90:125]  #图片切割   行/列plt.imshow(five_img_arr)#检查切分出图片(即将被模型进行分类的图片)的形状five_img_arr.shape   #(55, 35, 3)#将图片的第三个维度删除(降维)five_img_arr = five_img_arr.mean(axis=2) #任意的聚合方法都能降维  0-x 1-y 2-zfive_img_arr.shape#对不满足像素要求的图片进行等比例压缩import scipy.ndimage as ndimagefive_img_arr = ndimage.zoom(five_img_arr,zoom=(28/55,28/35))  #图片压缩five_img_arr.shape #(28, 28)five_img_arr = five_img_arr.reshape((1,784))  #1行784列five_img_arr.shape  #(1,784)knn.predict(five_img_arr)[0]  #X  未知分类的数据

#模型保存和运用

#保存模型from sklearn.externals import joblibjoblib.dump(knn,'./knn.m')  #写入模型 value, filename, compress=0, protocol=None, cache_size=Nonekknn = joblib.load('./knn.m')  #读取模型   kknn对象print(kknn) #KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',           #metric_params=None, n_jobs=1, n_neighbors=15, p=2,           #weights='uniform')kknn.predict(five_img_arr)[0] #测试模型 结果5

 

转载于:https://www.cnblogs.com/zhangchen-sx/p/11133868.html

你可能感兴趣的文章
seq命令
查看>>
centos7常见的操作01 UTC CST
查看>>
Java必会的基础知识(2)
查看>>
NHibernate系列文章目录
查看>>
函数内置方法
查看>>
Python_58之logging模块
查看>>
正则表达式
查看>>
楼房重建(分块优化)
查看>>
斐波那契数列(矩阵加速递推)
查看>>
HTTP笔记之一
查看>>
Gradle 学习一
查看>>
hiho #1223 不等式
查看>>
EOS多节点同步代码分析
查看>>
Synchronized关键字
查看>>
webfont 字体
查看>>
lua快速入门
查看>>
FullCalendar 官方文档翻译
查看>>
plsql 操纵表数据的2种方式
查看>>
输出日期
查看>>
hibernate中实体与数据库中属性对应的类型
查看>>