第十九天学习进度--简单线性函数提取并模拟计算机复杂图像识别函数(1)
昨天实现了一个计算机函数的提取过程,不过就函数提取的公式而言,因为用的是sklearn提供的多元线性回归分析函数,其中有最小二乘法和梯度下降的模拟。
但是无论是上述的哪种函数的模拟,一旦针对一些相对而言比较复杂的多元非线性问题,就很有可能不能发挥出函数提取的功能了。要做到一种精度比较高的模拟图像识别的过程的这个函数,必须要做出一种通用的多元的非线性分析算法才行,前几天查阅了相当多的资料,发现要做非线性回归分析的过程极其复杂,所以关于非线性回归分析的算法研究等到以后毕业设计完成后有比较多的时间之后再深入研究。
根据昨天实现的一种能够提取 计算机函数的算法,看到上述的函数提取的过程,突然有了一个想法。如果提供的是图片的数据,对应的结果是图片的类别的话,那么这个过程不就形成了一个图片识别的函数吗。
如果再得到这个函数之后,再将一个新的数据放进其中进行分析的话,不就能得到函数的对应相似值了吗,然而我并不知道这个过程的效果究竟怎么样,不过想想的话感觉效果可能并不会太好,因为图像识别的过程用到的是非线性的函数,而对于sklearn提供的函数模拟只是基于线性的,换句话来说,只要是有关于曲线的函数,sklearn基本上的分析就不会太准确,为了真正实现计算机函数的提取,还是需要一种非线性多元的回归分析算法,当多元非线性回归分析函数实现了之后,基本上就能模拟任意计算机或者是人脑的过程,包括神经网路,人的情感,决策等等,均可由数据和结果提取出其中的过程,而且过程并不需要调参,且对列表大小没有任何限制。
在没有多元非线性回归分析算法的前提下,我们暂时利用sklearn中的最小二乘法做一个简单的 图片识别的计算机函数的提取(因为线性,所以准确率不能保证)
提供数据如下:
minist的手写数据 以及 对应标签
算法:sklearn中提供线性的最小二乘法
目标:提取手写数据识别的函数
有了上述的过程之后,在昨天的函数提取的代码前提下,直接上代码
from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("./mnist_data/", one_hot=False) #函数的数据提取 image_batch,labels=mnist.train.next_batch(1500) model=func_create(image_batch, labels) #线性过程提取图片识别的函数 #取500个数据来验证函数效果 image_batch,labels=mnist.train.next_batch(500) predict=func_general(model,image_batch) #代入函数中 right=0 #正确个数 for i,one in enumerate(predict): if(get_near([1,2,3,4,5,6,7,8,9,0],one)==labels[i]): right+=1 print("正确率:%f"%(right/500))
果然线性回归分析对于图片识别的算法还是不行,这令人恼怒的正确率,只有22.4%,本来还估计再差也得有40-50%的正确率吧
不过预测的结果,大多都能在正确值的附近而不是与之相差太大的数值
因此线性函数的准确率并不能被很好的体现出来,观察到上述的预测值大多在正确值的附近,那么我有一个大胆的想法,就是建立多个线性函数,然后根据这多个线性函数的预测结果最终取平均值,不就能得到平均的结果了吗。