pybrain的安装及使用

来源:互联网 发布:侠义英雄坐骑进阶数据 编辑:程序博客网 时间:2024/06/06 00:23

首先要安装

nose,numpy,scipy,才能安装pybrain 包,同时很多人推荐安装setuptools Python 2.7,方便安装pybrain的包。

安装setup-tools的方法

 网址,https://pypi.python.org/pypi/setuptools#downloads,然后进入cmd进入根目录,python setup.py install安装

安装nose比较简单,和上面一样。

安装Numpy可以用setup-tools安装,cmd下输入easy-install Numpy

安装scipy直接到官网下载.exe文件一路点下一步即可.

最后是pybrain,参照这个博客http://luckyshilin.lofter.com/post/1cf85fed_5104521,主要是利用setup-tools安装.

一定要注意安装顺序.

快速上手numpy http://old.sebug.net/paper/books/scipydoc/numpy_intro.html

接下去就是pybrain的使用,首先说明一点,明确你是做回归还是做数据拟合,官网上的资料只有数据回归,而且pybrain的资料太少。

一开始我想使用最简单的f(x)=x来测试结果很差劲,发现所有输入层和输出层的数据必须归一化,这是关键。.归一化简单来说就是(值-整体向量最小值)/(整体向量最大值-整体向量最小值)

然后我的输入层和输出层都是0~1的数据,构建神经网络并训练,最后将需要拟合的值添加到原来的向量中,求出它的值(这个至是归一化过的)然后*(整体向量最大值-整体向量最小值)+整体向量最小值即可得到,效果不错。

神经网络进行数据拟合的优势就是在于不需要知道关系式,尤其是针对非线性拟合时(不知道关系式),当然缺点就是求不出表达式,就算求出来的那个也没有实际意义(只是计算机认为的合理)。

比如这里拟合y=x1+100*x2(注意这里数据是这样取得,但是我并不知道表达式,如果我就给你数据,运用其他方式是很难拟合的)


import numpy as npfrom pybrain.datasets import SupervisedDataSetfrom pybrain.supervised.trainers import BackpropTrainerfrom pybrain.tools.shortcuts import buildNetworkfrom pybrain.structure.modules import TanhLayerfnn=buildNetwork(2,30,8,1,bias=True)#第一个2是输入层的数据元(简单理解为有几个变量吧),第四个1是输出层的数据元(简单理解为因变量的个数)train=np.array([0,1,2,4,5,6,7,8])#第一个自变量向量train2=np.array([1,2,3,5,6,7,8,9])#第二个自变量向量label=np.array([100,201,302,504,605,706,807,908])#因变量tmax=train.max()#归一化tmin=train.min()train=(train-tmin)*1.0/(tmax-tmin)tmin2=train2.min()tmax2=train2.max()train2=(train2-tmin2)*1.0/(tmax2-tmin2)lmax=label.max();lmin=label.min();label=(label-lmin)*1.0/(lmax-lmin)ds=SupervisedDataSet(2,1)for i in range(len(train)):    ds.addSample([train[i],train2[i]],[label[i]])x=ds['input']//这里可以输出看看输入层的数据和输出层的数据(当然你可以省略)y=ds['target']print xprint ytrainer=BackpropTrainer(fnn,ds,momentum=0.1, verbose=True,learningrate=0.1)trainer.trainEpochs(epochs=100)#迭代次数train=np.array([0,1,2,4,5,6,7,8])train2=np.array([1,2,3,5,6,7,8,9])label=np.array([100,201,302,504,605,706,807,908])train=np.hstack((train,np.array([3])))#添加自变量1 为3print traintrain2=np.hstack((train2,np.array([4])))#添加自变量2 为4label=np.hstack((label,np.array([403])))#添加因变量为403(4*100+3)tmax=train.max()tmin=train.min()train=(train-tmin)*1.0/(tmax-tmin)tmin2=train2.min()tmax2=train2.max()train2=(train2-tmin2)*1.0/(tmax2-tmin2)lmax=label.max();lmin=label.min();label=(label-lmin)*1.0/(lmax-lmin)out=SupervisedDataSet(2,1)for i in range(len(train)):    out.addSample([train[i],train2[i]],[label[i]])out =fnn.activateOnDataset(out)train=np.array([0,1,2,4,5,6,7,8])train2=np.array([1,2,3,5,6,7,8,9])out=out*(lmax-lmin)+lmin#求得原始数据print  out    


0 0