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


算法思想:给定一个带标检的训练数据集(就是带分类结果的样本),对于一个新的输入实例,我们在训练数据集中以某种距离度量方式找出与该输入实例距离最近邻的k个实例。
找出这k个实例(这也是knn中k的含义)中类别出现最多的那个类别,最后我们就将该新的输入实例划分为此类别
import numpy as np
# bmp 图片后缀
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier img_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)
#将列表转numpy
feature = 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.shape
plt.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-z
five_img_arr.shape
#对不满足像素要求的图片进行等比例压缩
import scipy.ndimage as ndimage
five_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 joblib
joblib.dump(knn,'./knn.m') #写入模型 value, filename, compress=0, protocol=None, cache_size=None
kknn = 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

最新文章

  1. Workflow中InArgument与OutArgument区别
  2. service里面弹出对话框
  3. WKWebView新特性及JS交互
  4. zookeeper系列之五—Leader选举算法
  5. 推荐几个可以与PhoneGap很好搭配的UI框架
  6. UVa 1400 (线段树) "Ray, Pass me the dishes!"
  7. ###《More Effective C++》- 操作符
  8. 十四、C# 支持标准查询运算符的集合接口
  9. 微软雅黑 firefox Css 设置 font-family: "microsoft yahei","\5FAE\8F6F\96C5\9ED1","宋体";
  10. 【Xamarin 挖墙脚系列:Xamarin SDK开源了................】
  11. 自己动手系列——实现一个简单的LinkedList
  12. Verilog code
  13. vscode笔记(一)- vscode自动生成文件头部注释和函数注释
  14. 【perl】企业微信发消息
  15. 读取.Properties文件以及Spring注解读取文件内容
  16. Qtree4——动态点分治
  17. [原创]jQuery Validation范例
  18. 阻止提交按钮的默认 action
  19. php环境搭建 (window环境下 eclipse+Wampserver)
  20. 区间DP的摸索

热门文章

  1. 如何在MacOS的VScode上安装Python3
  2. Mysql单实例数据库安装
  3. mybatis(五):源码分析 - 结果集映射流程
  4. C++——绪论
  5. A conflict in the working copy obstructs the current operation
  6. VC++编译选项
  7. JS 抖动函数封装
  8. exists和not exists关键字
  9. 阿里巴巴手册之-Arrays.asList()数组转集合的问题
  10. data-dismiss="modal"