《机器学习》周志华 习题答案5.5
2016-07-02 01:04
239 查看
原题是写一个BP神经网络来拟合西瓜数据集,西瓜数据集我已经数值化了如下:
而后调用pybrain的库建立具有50个单元的单隐层神经网络,如下
下面分别是训练10000次和1000次的效果对比:
可以看到10000次的训练误差明显要低的多,但是有可能有过拟合问题。
参考文章:http://www.zengmingxia.com/use-pybrain-to-fit-neural-networks/
编号,色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率,好瓜 1,1,1,3,1,1,1,0.697,0.46,1 2,2,1,2,1,1,1,0.774,0.376,1 3,2,1,3,1,1,1,0.634,0.264,1 4,1,1,2,1,1,1,0.608,0.318,1 5,3,1,3,1,1,1,0.556,0.215,1 6,1,2,3,1,2,2,0.403,0.237,1 7,2,2,3,2,2,2,0.481,0.149,1 8,2,2,3,1,2,1,0.437,0.211,1 9,2,2,2,2,2,1,0.666,0.091,0 10,1,3,1,1,3,2,0.243,0.267,0 11,3,3,1,3,3,1,0.245,0.057,0 12,3,1,3,3,3,2,0.343,0.099,0 13,1,2,3,2,1,1,0.639,0.161,0 14,3,2,2,2,1,1,0.657,0.198,0 15,2,2,3,1,2,2,0.36,0.37,0 16,3,1,3,3,3,1,0.593,0.042,0 17,1,1,2,2,2,1,0.719,0.103,0
而后调用pybrain的库建立具有50个单元的单隐层神经网络,如下
#!/usr/bin/python #-*-coding:utf-8-*- importnumpyasnp importmatplotlib.pyplotasplt frommatplotlibimportcolors frompybrain.tools.shortcutsimportbuildNetwork frompybrain.supervised.trainersimportBackpropTrainer frompybrain.datasetsimportSupervisedDataSet file1=open('c:\quant\watermelon.csv','r') data=[line.strip('\n').split(',')forlineinfile1] data=np.array(data) X=[rawforrawindata[1:,1:-1]] y=[1ifraw[-1]=='1'else0forrawindata[1:]] X=np.array(X) y=np.array(y) printX,y #######################################################################以上是西瓜 fnn=buildNetwork(8,50,1) DS=SupervisedDataSet(8,1) fora,binzip(X,y): DS.addSample(a,b) #训练器采用BP算法 #verbose=True即训练时会把Totalerror打印出来,库里默认训练集和验证集的比例为4:1,可以在括号里更改 trainer=BackpropTrainer(fnn,DS,verbose=True,learningrate=0.01) #maxEpochs即你需要的最大收敛迭代次数,这里采用的方法是训练至收敛,我一般设为1000 trainer.trainUntilConvergence(maxEpochs=10000) #activate函数即神经网络训练后,预测的X2的输出值 fora,binzip(X,y): prediction=fnn.activate(a) printprediction,b
下面分别是训练10000次和1000次的效果对比:
训练10000次,左边是训练结果,右边是理想输出
[0.99417443]1
[0.99774329]1
[1.00390992]1
[0.99456691]1
[0.99167349]1
[0.99627566]1
[-0.16419402]1
[0.99678622]1
[-0.00259512]0
[1.46741515]0
[0.57305884]0
[-0.00284737]0
[-0.0029103]0
[-0.00400758]0
[1.19899233]0
[-0.00333452]0
[-0.26766382]0
训练1000次,左边是训练结果,右边是理想输出。
[0.3439171]1
[0.71063964]1
[0.86324691]1
[0.39205173]1
[0.97416348]1
[0.55886924]1
[0.1247508]1
[1.6945434]1
[0.38352444]0
[0.7585709]0
[-0.23212559]0
[0.03274158]0
[-0.33641601]0
[-0.65105817]0
[1.22768539]0
[0.11638493]0
[-0.13244805]0
可以看到10000次的训练误差明显要低的多,但是有可能有过拟合问题。
参考文章:http://www.zengmingxia.com/use-pybrain-to-fit-neural-networks/
相关文章推荐
- Linux文件的三种时间属性
- 使用apktool反编译apk获取资源文件
- java操作memcache
- Python中lambda用法
- python中的map、filter、reduce函数
- Linux文件操作
- AJV学习
- Python 语言及其应用 Chapter_4_Note_2 函数_参数_
- JSON-Schema学习心得
- qt之菜单项定制
- 数组集合简单操作
- 手机号编码解码
- poj1837 Balance (二维费用背包&&分组背包)
- ElasticSearch源码解析(一):转一篇介绍中文分词的文章
- python str的一些方法
- 安卓学习之—自定义ProgressBar的样式
- 进程通信--无名管道
- nginx负载均衡详细配置
- Java NIO原理及实例
- new与delete创建对象