文档详情

多项式函数学习.docx

发布:2017-06-16约2.62千字共11页下载文档
文本预览下载声明
实验一多项式函数学习引言机器学习是指机器通过学习改进其性能的过程。目前,一些针对特定学习任务的算法已经产生,关于学习的理论认识已开始逐步形成。人们已经开发出了很多实践性的计算机程序来实现不同类型的学习,一些商业化的应用也已经出现。例如,对于语音识别这样的课题,迄今为止,基于机器学习的算法明显胜过其他的方法。在数据挖掘领域,机器学习算法理所当然地得到应用,从包含设备维修记录、借贷申请、金融交易、医疗记录等信息的大型数据库中发现有价值的信息。随着对计算机认识的日趋成熟,机器学习必将在计算机科学和技术中扮演越来越重要的角色。本文用多项式函数对一般函数进行拟合,介绍了多项式函数学习的过程。问题描述设真实函数为,用多项式函数逼近真实函数。学习系数为。分限定取值和不限定取值两种情况进行实验,构造学习需要的训练样例,并讨论训练样例数目和分布与学习精度的关系,对实验中出现的各种问题进行讨论。模型建立与求解运用LMS(最小均方法)来对真实函数进行逼近。训练样例TE取自真实函数上的点,其中分,,三个区间进行讨论。真实函数为多项式函数为令对于每个训练样例,使用当前的权值计算,对于每个权值,使用来更新权值,其中为更新步长,,通过不断地更新权值,使达到较好的效果,模型求解是通过matlab实现的。仿真实验与结果分析这里通过matlab进行编程来实现多项式函数学习的过程,程序代码见附录1.区间为对程序进行运行,在区间内以0.1为间隔取21个点,步长为,迭代次数为1000000,得到的逼近曲线为此时得到的权值为此时计算,结果如下图在区间以0.2的间隔取11个点,步长为,迭代次数为1000000,得到的逼近曲线为此时计算,结果如下图又另中以0.1为间隔取了11个点,迭代次数为1000000,得到的逼近曲线为此时计算,结果如下图通过分析实验数据,可以看出此时的拟合效果比较好,误差平方和很小,真实函数与学习函数的误差均在0.05以内。此外一次是取了21个点,另一次是取了11个点,这里学习精度与训练样例数目的关系不是很明显。这里还按x指数分布进行了实验,对比实验结果,发现学习精度没有x为均匀分布时精度高。2.区间为在内,以0.2为间隔取50个点,步长为,迭代次数为1000000,得到的逼近曲线为此时得到的权值为此时计算,结果如下图在内,以0.1为间隔取100个点,步长为,迭代次数为1000000,得到的逼近曲线为此时得到的权值为此时计算,结果如下图在区间内做了两次实验,一次是选取了50个训练样例,另一次是选取了100个训练样例,其余参数都相同。可以分析出当区间由扩充到,学习函数的学习精度下降很多,学习误差基本在1~5之间,另外此处训练样例数目与学习精度的关系也不明显。3.区间为在内,以0.1为间隔取200个点,步长为,迭代次数为1000000,得到的逼近曲线为此时得到的权值为此时学习函数的精度已经很低,误差平方和值很大,而且此时步长已经设置的非常小,再扩展训练样例时已经无法进行拟合,算法不再收敛。这里直接用最小二乘法对真实函数进行拟合,得到的拟合曲线如下:可以看出直接利用最小二乘法进行拟合即使区间扩展到,拟合的效果依然很好,由此也看出了所用LMS算法的不足,LMS算法适用于对线性函数进行拟合,对于本实验中的非线性函数,有一定的局限性。结语通过运用LMS学习算法来对一般函数进行多项式函数的学习,对机器学习的内涵有了更深入的了解,对自己的编程能力也有了一定的提高。实验中迭代的次数为1000000,通过增加迭代的次数,肯定会提高学习的精度,但会使程序的开销增大很多。而且由于编写程序的缺陷,当x取值很大时,即使迭代次数很大,算法还是不会收敛。这个问题可能是因为LMS算法本身不适用于对非线性函数进行拟合,也可能是因为算法编写的问题。此外,实验中训练样例的分布主要是按x均匀分布,只是简单地尝试了一下指数分布,未做深入的分析。最后关于过度拟合的问题,实验中应该不会存在,毕竟程序是按课本中模板编写,没有考虑多余的变量。最后,关于本算法接下来还需更深入的理解和分析,对算法进行改进也是下一步要做的工作。附录matlab程序代码如下:clear all;alpha = 2e-11;ini = 0.1;fin = 10;num = 100;x=ini:0.1:fin;%x=poissrnd(1,1,20);f1 = 0.38*power(x,0.5)+2.5*power(x,2);scatter(x,f1,.,b);hold on;q = [1,1,1,1,1,1];f2 = q(6)+q(1)*x+q(2)*power(x,2)+q(3)*power(x,3)+q(4)*power(x,4)+q(5)*power(x,5);f3= sum(power((f2-f1),2));for c
显示全部
相似文档