鱼C论坛

 找回密码
 立即注册
查看: 10910|回复: 85

[技术交流] python小练习(063):python实现多层神经网络的机器学习(二)

[复制链接]
发表于 2017-1-24 09:59:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jerryxjr1220 于 2017-1-24 10:10 编辑

上一次的小练习简单分享了20行代码实现的多层神经网络的机器学习。

今天来讲一个具体的复杂例子,说明一下多层神经网络的机器学习的强大功能--拟合高幂次函数。

题目:
输入:[-0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
输出:[13.1441, 11.5536, 10.1961, 9.0416, 8.0625, 7.2336, 6.5321, 5.9376, 5.4321, 5.0, 4.6281, 4.3056, 4.0241, 3.7776, 3.5625, 3.3776, 3.2241, 3.1056, 3.0281, 3.0]
已知这是一个高幂次函数在【-0.9,1】区间段中的一组数据,求解拟合度最好的高幂次函数 (多少次幂未知)

如果没有高效的求解算法,要拟合幂次未知的高幂次方程难度是相当大的,哪怕在matlab中的标准回归模块中最高也仅支持3次幂。

下面,我们就用python高效的求解本题:
方法还是和上次小练习中的方法一样,区别是为了加快自修正的速度,我把每次修正的权重全部设为1,也就是每次都会用上一次的误差修正下一次地参数。
首先假设最高次幂为5次(设再高也是可行的,初次设定好最高次幂后,可以根据后续的确信度进行调整,若确信度低就再调高幂次)。
那么函数方程为:Y=o*X**5+p*X**4+q*X**3+r*X**2+s*X+t

还是先看最后的结果:
列出了前10次机器学习自调整的确信度以及总共1000次机器学习的确信度:(确信度利用标准差计算得到)
调整次数:1  确信度: -146.581969958%
调整次数:2  确信度: -57.1543895104%
调整次数:3  确信度: 41.9843490833%
调整次数:4  确信度: 54.3347839432%
调整次数:5  确信度: 69.4401666869%
调整次数:6  确信度: 76.2338848743%
调整次数:7  确信度: 81.8372422013%
调整次数:8  确信度: 86.5870224139%
调整次数:9  确信度: 89.8755646957%
调整次数:10  确信度: 92.2000428784%
调整次数:50  确信度: 99.442099187%
调整次数:100  确信度: 99.8405251983%
调整次数:150  确信度: 99.9536136407%
调整次数:200  确信度: 99.9864861301%
调整次数:250  确信度: 99.9960623667%
调整次数:300  确信度: 99.9988526468%
调整次数:350  确信度: 99.9996656821%
调整次数:400  确信度: 99.9999025858%
调整次数:450  确信度: 99.9999716153%
调整次数:500  确信度: 99.9999917292%
调整次数:550  确信度: 99.99999759%
调整次数:600  确信度: 99.9999992978%
调整次数:650  确信度: 99.9999997954%
调整次数:700  确信度: 99.9999999404%
调整次数:750  确信度: 99.9999999826%
调整次数:800  确信度: 99.9999999949%
调整次数:850  确信度: 99.9999999985%
调整次数:900  确信度: 99.9999999996%
调整次数:950  确信度: 99.9999999999%
调整次数:1000  确信度: 100.0%
拟合函数的参数:o=0.000000,p=1.000000,q=-2.000000,r=3.000000,s=-4.000000,t=5.000000

可以发现机器自学习的调整效率非常高,经过前10次调整确信度已经达到90%以上,经过前1000次调整,确信度接近100%(实际不可能达到100%,因为微小的误差始终存在,只是小数位数太长我舍去了)。

最终函数方程为:Y=X**4-2*X**3+3*X**2-4*X+5

整个自学习过程非常快速,毫秒级别即可完成。

对于再高幂次的方程可以增加自调整次数,我们普通计算机对于100万次以下的自学习都是没有问题的。

源代码如下:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
suxinmi + 5 + 5 + 3 请不要无意义灌水!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-1-24 22:48:31 From FishC Mobile | 显示全部楼层
过来学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-25 10:55:49 | 显示全部楼层
高幂次方程拟合的拓展:
如果输入和输出的点不是完全匹配某方程,机器学习同样可以求得最优解。
例如:
X = [-0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
Y = [13.1441, 11.5, 10.2, 9, 8, 7.2336, 6.5, 6, 5.4321, 5.0, 4.6281, 4.3, 4, 3.7776, 3.5625, 3.3776, 3.2241, 3.1056, 3.0281, 3.0]

利用本方法求得最优拟合解:
调整次数:1  确信度: -146.221289158%
调整次数:2  确信度: -56.8160904544%
调整次数:3  确信度: 42.3174417077%
调整次数:4  确信度: 54.6224621998%
调整次数:5  确信度: 69.652532493%
调整次数:6  确信度: 76.3509236768%
调整次数:7  确信度: 81.8782557272%
调整次数:8  确信度: 86.5455048773%
调整次数:9  确信度: 89.7303098374%
调整次数:10  确信度: 91.9310123431%
调整次数:1000  确信度: 97.8379486988%
调整次数:2000  确信度: 97.8379486989%
调整次数:3000  确信度: 97.8379486989%
拟合函数的参数:o=-0.114533,p=1.102072,q=-1.901031,r=2.910141,s=-3.998615,t=5.001966
当自调整1000次以上时,确信度几乎保持不变了,也就意味着,本拟合方程最高可达到的确信度为: 97.8379486989%
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-1-25 11:05:42 | 显示全部楼层
如果用上述方程预测X=1.1时的值,并计算误差:
  1. pred = o*1.1**5+p*1.1**4+q*1.1**3+r*1.1**2+s*1.1+t
  2. std = 1.1**4-2*1.1**3+3*1.1**2-4*1.1+5
  3. print ('预测值:%f,标准值:%f,偏差:%f'%(pred,std,abs(pred-std)/std*100)+'%')
复制代码

输出:
预测值:3.023575,标准值:3.032100,偏差:0.281163%
可见预测值的偏差也是非常小的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-4 15:41:10 | 显示全部楼层
不好意思啊,楼主,我手在触摸板上哆嗦了一下,结果理由给写错了。本来想写感谢楼主的,结果写成这玩意了,实在是不好意思啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-4 15:42:28 | 显示全部楼层
评分理由给写错了,实在是太尴尬了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-2-5 12:50:19 | 显示全部楼层
感恩楼主!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-5 16:29:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-13 21:35:59 | 显示全部楼层
新人围观
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-15 22:43:41 | 显示全部楼层
6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-17 15:25:53 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-18 19:21:09 | 显示全部楼层
请问下楼主,为什么这个方法不能用于计算您上一个例子 Y=RX+b这种函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-18 21:08:43 | 显示全部楼层
大补的小甲鱼粉 发表于 2017-4-18 19:21
请问下楼主,为什么这个方法不能用于计算您上一个例子 Y=RX+b这种函数

可以计算上一个例子的,只不过对于一次线性方程用高幂次方程去拟合未必合适,反而会增加调整的次数,而且误差也会增大(因为需要考虑的变量多了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-18 21:46:11 | 显示全部楼层
jerryxjr1220 发表于 2017-4-18 21:08
可以计算上一个例子的,只不过对于一次线性方程用高幂次方程去拟合未必合适,反而会增加调整的次数,而且 ...

x=list(range(1,11))
y=list(range(10,110,10))
a=0
b=0
e=[0]*2
for i in range(1000):
    for i in range(10):
        e[0]=y-a*x-b
        a=a+e[0]
        e[1]=y-a*x-b
        b=b+e[0]
print 'a=',a
print 'b=',b
这样子算下来,a,b的值都很大,是不是哪里弄错了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-18 22:05:34 | 显示全部楼层
大补的小甲鱼粉 发表于 2017-4-18 21:46
x=list(range(1,11))
y=list(range(10,110,10))
a=0

你可能还没有理解机器学习的方法,首先反复迭代是为了能通过误差计算出调整步长,并且这个误差应该是成线性收敛的,如果不满足上述的条件,就会出现调整值越来越大,误差也会越来越大。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-18 22:18:29 | 显示全部楼层
jerryxjr1220 发表于 2017-4-18 22:05
你可能还没有理解机器学习的方法,首先反复迭代是为了能通过误差计算出调整步长,并且这个误差应该是成线 ...

我是新手。不是很懂,有没有什么书籍或者资料可以参考一下呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-18 22:23:28 | 显示全部楼层
大补的小甲鱼粉 发表于 2017-4-18 22:18
我是新手。不是很懂,有没有什么书籍或者资料可以参考一下呢?

如果你是指的数学基础的话,那么线性代数和概率论是必须的,因为他们是机器学习的基础,很多激励函数和优化器,分类器都会用到。
电脑基础的话,你可以去看看tensorflow和keras的官方网站,都有比较详细的新手教程。
再进一步学习的话,可以去看看google的tensorflow论坛,当然是全英文的,上面有很多各个领域的专业论文以及项目实例,然后自己动手实践。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-18 22:40:03 | 显示全部楼层
jerryxjr1220 发表于 2017-4-18 22:23
如果你是指的数学基础的话,那么线性代数和概率论是必须的,因为他们是机器学习的基础,很多激励函数和优 ...

非常感谢,线性代数,概率论都在看,刚好考研也要看的。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-24 07:12:16 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-24 10:15:14 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 20:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表