搜索
查看: 34393|回复: 17

[大盘交流] 提高BP神经网络泛化能力的方法

[复制链接]

发表于 2007-12-18 12:22 | 显示全部楼层

提高BP神经网络泛化能力的方法

来自:MACD论坛(bbs.macd.cn) 作者:乎乎 浏览:34393 回复:17

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
泛化能力也就是神经网络用于对未知数据预测的能力。

几种常用方法,大家探讨:

1、较多的输入样本可以提高泛化能力;
但不是太多,过多的样本导致过度拟合,泛化能力不佳;
样本包括至少一次的转折点数据。

2、隐含层神经元数量的选择,不影响性能的前提下,尽量选择小一点的神经元数量。
隐含层节点太多,造成泛化能力下降,造火箭也只要几十个到几百个神经元,拟合几百几千个数据何必要那么多神经元?

3、误差小,则泛化能力好;误差太小,则会过度拟合,泛化能力反而不佳。

4、学习率的选择,特别是权值学习率,对网络性能有很大影响,太小则收敛速度很慢,且容易陷入局部极小化;
太大则,收敛速度快,但易出现摆动,误差难以缩小;
一般权值学习率比要求误差稍微稍大一点点;
另外可以使用变动的学习率,在误差大的时候增大学习率,等误差小了再减小学习率,这样可以收敛更快,学习效果更好,不易陷入局部极小化。

5、训练时可以采用随时终止法,即是误差达到要求即终止训练,以免过度拟合;
可以调整局部权值,使局部未收敛的加快收敛;。

以上仅仅是个人的一点观点,其他的方法还有很多。
参与人数 1奖励 +18 时间 理由
飞舟 + 18 2007-12-18 12:27 论坛有你更精彩!

查看全部评分

金币:
奖励:
热心:
注册时间:
2007-12-14

回复 使用道具 举报

签到天数: 1094 天

结构深研究

发表于 2007-12-18 12:25 | 显示全部楼层
不懂这些,没法参与讨论,加分支持一下
金币:
奖励:
热心:
注册时间:
2004-4-17

回复 使用道具 举报

签到天数: 34 天

无影无棕学术交流家园

发表于 2007-12-18 13:35 | 显示全部楼层
我也看不懂,这是关于什么的啊
金币:
奖励:
热心:
注册时间:
2007-5-27

回复 使用道具 举报

发表于 2007-12-18 14:44 | 显示全部楼层
比较深,路过
金币:
奖励:
热心:
注册时间:
2007-12-7

回复 使用道具 举报

 楼主| 发表于 2007-12-18 15:54 | 显示全部楼层

bp神经网络飞狐公式

{三层网络:输入层节点数=4,输出层节点数=1,隐含层节点数=隐含层
Sigmoid,Purelin,Trainlm}

INPUT: 隐含层(3,2,20,1),学习次数(2,1,100,1);
VARIABLE: 样本数=100, 首K线=DATACOUNT-样本数-3;
IF 首K线 < 1 THEN BEGIN
DRAWTEXTEX(ISLASTBAR,0,10,20,'股票上市时间太短,Κ线数量不足');
EXIT; {数据不足,直接退出}
END;

VARIABLE: 数据=(C+O)/2, 最大=HHV(数据,样本数+3), 数据=数据/最大; {数据归一化}
VARIABLE: 预测[4]=0, 权值学习率=0.2, 阀值学习率=0.02, EPOCH=0, POS=0, I=0, J=0;
VARIABLE: 权值1[隐含层*4]=RAND(10000)/10000-0.5, 权值2[隐含层]=RAND(10000)/10000-0.5;
VARIABLE: 输出2[隐含层]=0, 阀值2[隐含层]=RAND(10000)/10000-0.5, 德特2[隐含层]=0;
VARIABLE: 输出3[样本数]=0, 阀值3=RAND(10000)/10000-0.5, 德特3=0, 误差=0, 要求误差=0.2;

FOR EPOCH=1 TO 学习次数*10 DO BEGIN {网络学习}
误差:=0;
FOR POS=1 TO 样本数 DO BEGIN
FOR J=1 TO 隐含层 DO BEGIN
输出2[J]:=0;
FOR I=1 TO 4 DO 输出2[J]:=输出2[J]+数据[首K线+POS+I-2]*权值1[(J-1)*隐含层+I];
输出2[J]:=1/(1+EXP(-输出2[J]-阀值2[J])); {隐含层输出}
END;
输出3[POS]:=0;
FOR J=1 TO 隐含层 DO 输出3[POS]:=输出3[POS]+输出2[J]*权值2[J];
输出3[POS]:=输出3[POS]-阀值3; {学习结果,输出层输出}

德特3:=数据[首K线+POS+3]-输出3[POS];
误差:=误差+德特3*德特3; {计算误差}
FOR J=1 TO 隐含层 DO BEGIN
权值2[J]:=权值2[J]+权值学习率*德特3*输出2[J]; {调整权值}
德特2[J]:=德特3*权值2[J]*输出2[J]*(1-输出2[J]);
FOR I=1 TO 4 DO 权值1[(J-1)*隐含层+I]:=权值1[(J-1)*隐含层+I]+权值学习率*德特2[J]*数据[首K线+POS+I-2];
END;

阀值3:=阀值3+阀值学习率*德特3; {调整阀值}
FOR J=1 TO 隐含层 DO 阀值2[J]:=阀值2[J]+阀值学习率*德特2[J];
END;
误差:=误差/2;
IF 误差<=要求误差 THEN BREAK; {误差达到要求就退出,避免过度学习}
END;

{版权所有:嘉兴·陈(uuxp.com),QQ:110036737,Mail:cyouwei@zj.com}
FOR POS=1 TO 4 DO 预测[POS]:=数据[首K线+样本数-1+POS]; {取预测数据}
FOR POS=1 TO 样本数 DO 数据[首K线+POS+3]:=输出3[POS];  {返回学习结果}

FOR POS=1 TO 5 DO BEGIN {进行预测,共5个结果}
FOR J=1 TO 隐含层 DO BEGIN
输出2[J]:=0;
FOR I=1 TO 4 DO 输出2[J]:=输出2[J]+预测[I]*权值1[(J-1)*隐含层+I];
输出2[J]:=1/(1+EXP(-输出2[J]-阀值2[J]));
END;
输出3[POS]:=0;
FOR J=1 TO 隐含层 DO 输出3[POS]:=输出3[POS]+输出2[J]*权值2[J];
输出3[POS]:=输出3[POS]-阀值3;
FOR I=1 TO 3 DO 预测[I]:=预测[I+1]; {更换预测数据,提供下一次simulate}
预测[I]:=输出3[POS];
END;

BPNN: 数据*最大,COLORYELLOW; {学习结果}
误差值: 误差,COLORGRAY,LINETHICK0; {误差,要求不要过大或者过小;下面是预测结果}
DRAWTEXT(ISLASTBAR,输出3[1]*最大,'·'),ALIGN0,SHIFT1,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[2]*最大,'·'),ALIGN0,SHIFT2,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[3]*最大,'·'),ALIGN0,SHIFT3,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[4]*最大,'·'),ALIGN0,SHIFT4,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[5]*最大,'·'),ALIGN0,SHIFT5,COLORMAGENTA,PXUP8;
金币:
奖励:
热心:
注册时间:
2007-12-14

回复 使用道具 举报

 楼主| 发表于 2007-12-18 16:02 | 显示全部楼层

RBF神经网络飞狐公式

{三层网络:输入层节点数=4,输出层节点数=1,隐含层节点数=隐含层}
INPUT: 数据类型(4,1,4,1),隐含层(4,2,20,1),学习次数(2,1,100,1);
VARIABLE: 样本数=100, 首K线=DATACOUNT-样本数-3;
IF 首K线 < 1 THEN BEGIN
DRAWTEXTEX(ISLASTBAR,0,10,20,'股票上市时间太短,Κ线数量不足');
EXIT; {数据不足,直接退出}
END;
VARIABLE: 数据=IF(数据类型=4,C,IF(数据类型=2,H,IF(数据类型=3,L,O))), 最大=HHV(数据,样本数+4);
VARIABLE: 预测[4]=0, 权值学习率=0.5, EPOCH=0, POS=0, 权值2[隐含层]=1, 输出2[隐含层]=0;
VARIABLE: 输出3[样本数]=0, 德特3=0, 误差=0, 要求误差=0.5;
VARIABLE: 重心[隐含层*4]=0, 距离[隐含层]=0, INCC[4]=0, INTT[样本数]=0, NOTEND=1;
VARIABLE: I=0, J=0, K=0, Z=0, M=0, N=0, EZ=0.001, TD=0, TD0=0, D0=0, S2=0, S1=0;
数据:=数据/最大; {数据归一化}
FOR I=1 TO 隐含层 DO BEGIN
INCC[I]:=I; FOR J=1 TO 4 DO 重心[(I-1)*隐含层+J]:=数据[首K线+I+J-2];
END;
WHILE NOTEND DO BEGIN
FOR I=1 TO 样本数 DO BEGIN
D0:=999999.9;
FOR J=1 TO 隐含层 DO BEGIN
S2:=0; FOR K=1 TO 4 DO S2:=S2+POW(数据[首K线+I+K-2]-重心[(J-1)*隐含层+K],2);
S2:=SQRT(S2);
IF S2<D0 THEN BEGIN D0:=S2; INTT[I]:=J; END;
END;
END;
FOR I=1 TO 隐含层 DO BEGIN
距离[I]:=999999;S2:=0;
FOR J=1 TO 样本数 DO BEGIN
IF INTT[J]=I THEN BEGIN
D0:=0;
FOR K=1 TO 样本数 DO BEGIN
IF INTT[K]=I AND J<>K THEN BEGIN
S2:=0;FOR Z=1 TO 4 DO S:=S+POW(数据[首K线+J+Z-2]-数据[首K线+K+Z-2],2);
S2:=SQRT(S2);
END;
END;
D0:=IF(D0+S2=0,1,D0+S2);
IF D0<距离[I] THEN BEGIN 距离[I]:=D0;INCC[I]:=J;FOR M=1 TO 4 DO 重心[(I-1)*隐含层+M]:=数据[首K线+J+M-2];END;
END;
END;
END;
TD:=0;FOR I=1 TO 隐含层 DO TD:=TD+重心[I];
IF ABS(TD-TD0)<EZ THEN NOTEND:=0; ELSE TD0:=TD;
END;

FOR EPOCH=1 TO 学习次数*10 DO BEGIN {网络学习}
误差:=0;
FOR POS=1 TO 样本数 DO BEGIN
FOR J=1 TO 隐含层 DO BEGIN
输出2[J]:=0;FOR I=1 TO 4 DO 输出2[J]:=输出2[J]+POW(数据[首K线+POS+I-2]-重心[(J-1)*隐含层+I],2);
输出2[J]:=1/(1+EXP(-输出2[J]/(2*POW(距离[J],2)))); {隐含层输出}
END;
输出3[POS]:=0; {学习结果,输出层输出}
FOR J=1 TO 隐含层 DO 输出3[POS]:=输出3[POS]+输出2[J]*权值2[J];

德特3:=数据[首K线+POS+3]-输出3[POS];误差:=误差+POW(德特3,2); {计算误差}
FOR J=1 TO 隐含层 DO 权值2[J]:=权值2[J]+权值学习率*德特3*输出2[J]*输出3[POS]; {调整权值}
END;
误差:=SQRT(误差);IF 误差<=要求误差 THEN BREAK; {误差达到要求就退出,避免过度学习}
END;

FOR POS=1 TO 4 DO 预测[POS]:=数据[首K线+样本数-1+POS]; {取预测数据}
FOR POS=1 TO 样本数 DO 数据[首K线+POS+3]:=输出3[POS];  {返回学习结果}

FOR POS=1 TO 5 DO BEGIN {进行预测,共5个结果}
FOR J=1 TO 隐含层 DO BEGIN
输出2[J]:=0;FOR I=1 TO 4 DO 输出2[J]:=输出2[J]+POW(预测[I]-重心[(J-1)*隐含层+I],2);
输出2[J]:=1/(1+EXP(-输出2[J]/(2*POW(距离[J],2))));
END;
输出3[POS]:=0;FOR J=1 TO 隐含层 DO 输出3[POS]:=输出3[POS]+输出2[J]*权值2[J];
FOR I=1 TO 3 DO 预测[I]:=预测[I+1]; {更换预测数据,提供下一次simulate}
预测[I]:=输出3[POS];
END;

BPNN: 数据*最大,COLORYELLOW; {学习结果}
{MABP: MA(数据*最大,5);} {也可以做适当的平均}
误差值: 误差,COLORGRAY,LINETHICK0; {误差,要求不要过大或者过小;下面是预测结果}
DRAWTEXT(ISLASTBAR,输出3[1]*最大,'·'),ALIGN0,SHIFT1,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[2]*最大,'·'),ALIGN0,SHIFT2,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[3]*最大,'·'),ALIGN0,SHIFT3,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[4]*最大,'·'),ALIGN0,SHIFT4,COLORMAGENTA,PXUP8;
DRAWTEXT(ISLASTBAR,输出3[5]*最大,'·'),ALIGN0,SHIFT5,COLORMAGENTA,PXUP8;
金币:
奖励:
热心:
注册时间:
2007-12-14

回复 使用道具 举报

发表于 2007-12-18 16:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
金币:
奖励:
热心:
注册时间:
2006-3-31

回复 使用道具 举报

签到天数: 79 天

艾略特波浪看盘将上证指数拆解到底

发表于 2007-12-18 18:25 | 显示全部楼层
目前数学界对SVM(支持向量机)应用在数据预报领域.神经网络与SVM可进行对比一下效果.

从所看到的一些资料结论来看SVM预报性能明显高于神经网络.
金币:
奖励:
热心:
注册时间:
2003-5-11

回复 使用道具 举报

 楼主| 发表于 2007-12-18 19:55 | 显示全部楼层
svm确实不错的,但到底怎样,我还没试过,有时间试试,多谢!
金币:
奖励:
热心:
注册时间:
2007-12-14

回复 使用道具 举报

发表于 2007-12-18 21:20 | 显示全部楼层
乎乎兄推荐的网站,www.macd.cn,我去看了,很受益,看了好几天看得都有点头晕了, 看来速成是不行了,但会坚持学习下去。再次道声谢谢!

[ 本帖最后由 飞舟 于 2007-12-19 12:07 编辑 ]
金币:
奖励:
热心:
注册时间:
2002-10-17

回复 使用道具 举报

发表于 2007-12-19 11:57 | 显示全部楼层
居然有这样的帖子,像我这样只知杀人越货的贼寇哪能明白.
金币:
奖励:
热心:
注册时间:
2007-6-2

回复 使用道具 举报

发表于 2007-12-19 17:35 | 显示全部楼层
:) :) :) :) :) :)

[ 本帖最后由 sgp111 于 2007-12-20 23:07 编辑 ]
金币:
奖励:
热心:
注册时间:
2002-10-17

回复 使用道具 举报

发表于 2007-12-21 12:35 | 显示全部楼层
不懂!不懂!
金币:
奖励:
热心:
注册时间:
2007-11-25

回复 使用道具 举报

签到天数: 1 天

发表于 2017-1-11 21:48 | 显示全部楼层
金币:
奖励:
热心:
注册时间:
2004-1-24

回复 使用道具 举报

签到天数: 3 天

发表于 2017-1-12 10:02 | 显示全部楼层
谢谢分享
金币:
奖励:
热心:
注册时间:
2017-1-11

回复 使用道具 举报

发表于 2017-3-28 05:59 | 显示全部楼层
谢谢分享
金币:
奖励:
热心:
注册时间:
2008-2-20

回复 使用道具 举报

发表于 2017-5-8 14:17 | 显示全部楼层
谢谢分享
金币:
奖励:
热心:
注册时间:
2008-2-20

回复 使用道具 举报

发表于 2017-6-22 20:59 | 显示全部楼层
谢谢分享
金币:
奖励:
热心:
注册时间:
2008-2-20

回复 使用道具 举报

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

本版积分规则

本站声明:1、本站所有广告均与MACD无关;2、MACD仅提供交流平台,网友发布信息非MACD观点与意思表达,因网友发布的信息造成任何后果,均与MACD无关。
MACD俱乐部(1997-2019)官方域名:macd.cn   MACD网校(2006-2019)官方域名:macdwx.com
值班热线[9:00—17:30]:18292674919   24小时网站应急电话:18292674919
找回密码、投诉QQ:89918815 友情链接QQ:95008905 广告商务联系QQ:17017506 电话:18292674919
增值电信业务经营许可证: 陕ICP19026207号—2  陕ICP备20004035号

举报|意见反馈|Archiver|手机版|小黑屋|MACD俱乐部 ( 陕ICP备20004035号 )

GMT+8, 2024-4-20 18:09 , Processed in 0.065669 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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