这是运行了7次得到的结果。与我们前面的支持向量机相比,显然神经网络的单层感知器分类不是那么的可信,有些弱。
我们可以尝试来做交叉验证,可以发现交叉验证结果并不理想。
二、线性神经网络
尽管当训练样例线性可分时,感知器法则可以成功地找到一个权向量,但如果样例不是线性可分时它将不能收敛。因此,人们设计了另一个训练法则来克服这个不足,称为delta法则。
如果训练样本不是线性可分的,那么delta法则会收敛到目标概念的最佳近似。 delta法则的关键思想是使用梯度下降来搜索可能权向量的假设空间,以找到最佳拟合训练样例的权向量。 我们将算法描述如下:
1、定义变量与参数。x(输入向量),w(权值向量),b(偏置),y(实际输出),d(期望输出),a(学习率参数)(为叙述简便,我们可以将偏置并入权值向量中) 2、初始化w=0
3、输入样本,计算实际输出与误差。e(n)=d-x*w(n) 4、调整权值向量w(n+1)=w(n)+a*x*e(n) 5、判断是否收敛,收敛结束,否则返回3
Hayjin证明,只要学习率a<2/maxeign, delta法则按方差收敛。其中maxeigen为x’x的最大特征值。故我们这里使用1/maxeign作为a的值。 我们还是以上面的鸢尾花数据为例来说这个问题。运行代码: p<-rbind(rep(1,150),iris1) d<-c(rep(0,50),rep(1,100)) w<-rep(0,3)
a<-1/max(eigen(t(p)%*%p)$values) max<-1000 e<-rep(0,150) eps<-rep(0,1000) i<-0
for(i in 1:max){ v<-w%*%p;
y<-v; e<-d-y;
eps[i+1]<-sum(e^2)/length(e) w<-w+a*(d-y)%*%t(p); if(i==max) print(w) }
得到分类直线:
相比感知器分类而言已经好了太多了,究其原因不外乎传递函数由二值阈值函数变为了线性函数,这也就是我们前面提到的delta法则会收敛到目标概念的最佳近似。增量法则渐近收敛到最小误差假设,可能需要无限的时间,但无论训练样例是否线性可分都会收敛。
为了明了这一点我们考虑鸢尾花数据后两类花的分类(这里我们将前两类看做一类),使用感知器:
使用线性分类器: