Python实现基于实现基于KNN算法的笔迹识别功能详解算法的笔迹识别功能详解
本文实例讲述了Python实现基于KNN算法的笔迹识别功能。分享给大家供大家参考,具体如下:
需要用到:需要用到:
Numpy库
Pandas库
手写识别数据 点击此处本站下载本站下载。
数据说明:数据说明:
数据共有785列,第一列为label,剩下的784列数据存储的是灰度图像(0~255)的像素值 28*28=784
KNN(K近邻算法近邻算法)::
从训练集中找到和新数据最接近的K条记录,根据他们的主要分类来决定新数据的类型。
这里的主要分类,可以有不同的判别依据,比如“最多”,“最近邻”,或者是“距离加权”。
整个程序的几个部分:整个程序的几个部分:
1.数据的归一化处理(normalization)
2.(重要)找出与test数据最接近的train数据的编号,根据编号查找到对应的label,将label赋给test数据的预测值
3.统计知道的test的label值与test的预测label值得正确率
Step 1
导入Numpy与Pandas库
import numpy as np
import pandas as pd
Step 2
对数据进行归一化
对数据归一化的方法很多,比如:
一、max-Min标准化
max – Min标准化方法是对原始数据进行线性变换。设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过
max-Min标准化映射成在区间[0,1]中的值x’,其公式为:
新数据=(原数据-极小值)/(极大值-极小值)
二、
新数据=原数据/(原数据的平方和开根号)
三、
y = ( x – min )/( max – min ) 其中min为x的最小值,max为x的最大值,输入向量为x,归一化后的输出向量为y 。上式将数据
归一化到 [ 0 , 1 ]区间,当激活函数采用S形函数时(值域为(0,1))时这条式子适用
在这里采用方法二
def normalize(x):
norms = np.apply_along_axis(np.linalg.norm,1,x)
return x / np.expand_dims(norms,-1)
调用np中的linalg.norm(x)和 apply_along_axis(func, axis, x)函数
linalg.norm(x)函数的作用是 return sum(abs(xi)**2)**0.5,
apply_along_axis(func, axis, x) 函数的作用是将x按axis方向执行func函数,axis=0表示做列方向上的运算,axis=1表示做行方向上的
运算
step 3
找出与test数据最接近的train数据,这步是最关键的一步。
评论0