正则化最小二乘法——神经网络与机器学习笔记2

来源:互联网 发布:柏拉图自动生成软件 编辑:程序博客网 时间:2024/05/16 12:34

参考Andrew Ng 公开课的推导

一些公式

trA=ni=1Aii
trAB=trBA
trABC=trCBA=trBCA
trA=trAT
if aR, tra=a
AtrAB=BT
AtrABATC=CAB+CTABT
θJ=Jθ0Jθ1Jθn
Af(A)=fA11AAn1AA1nAAnn

正则化最小二乘法推导

对于花费函数J=i(d(i)wTx)+λwTw ,为使它取最小值,则应取wJ=0.

J=i(d(i)wTx)+λwTw=(DXTw)2+λwTw=(DTwTX)(DXTw)+λwTw=DTDwTXDDTXTw+wTXXTw+λwTw=trDTDtrwTXDtrDTXTw+trwTXXTw+trλwTw=trDTD2trDTXTw+trwTXXTw+trλwTw

wJ=2wtrwTXD+wtrwTXXTw+wtrλwTw

wtrDTXTw=wtrwDTXT (trAB=trBA=XD (AtrAB=BT

wtrwTXXTw=wtrwwTXXT (trABC=trCBA=trBCA)=wtrwIwTXXT=XXTwI+XXTwI (AtrABATC=CAB+CTABT)=2XXTw

wtrλwTw=wtrλwwT=λwtrwIwTI=2λw

所以,
XXTw+λw(XXT+λI)ww=XD=XD=(XXT+λI)1XD

综上得出正则化最小二乘法公式: w=(XXT+λI)1XD
λ=0时即为常规的最小二乘法公式: w=(XXT)1XD

利用正则化最小二乘法进行训练

function [w errRate cost] = RegularizedLeastSquares(x,d,lambda)if nargin==2    lambda=0;end[n,m]=size(x);w=(x*x'+lambda*eye(n,n))\x*d;y=sign(x'*w);%错误率errRate=sum(d~=y)/m;%花费函数cost=sum((d-y).^2)+lambda*w'*w;end

测试,随机数的产生参考http://blog.csdn.net/jinjgkfadfaf/article/details/53200819

close all;%产生随机数n1=1000;n2=1000;n=n1+n2;[x1,y1,x2,y2]=GenRandomData(8,-5,3,n1,n2);samps=[ones(n1,1),x1, y1;ones(n2,1),x2,y2];d=[ones(n1,1);-ones(n2,1)];%打乱顺序% randI=randperm(n);% samps(randI,:)=samps(1:n,:);% d(randI)=d(1:n);%利用感知机进行训练w0 = [-10;-10;-10];etaLim = 5e-6;x = samps';epochN =5000;%[w, err] = Rosenblatt(x,d,w0,etaLim,epochN)%[w, err] = RosenblattStpDes(x,d,w0,etaLim,epochN)lambda=0.1;[w errRate cost] = RegularizedLeastSquares(x,d,lambda)%画图figure;plot(x1,y1,'Marker','x','Color','r','LineStyle','none');hold on;plot(x2,y2,'Marker','o','Color','b','LineStyle','none');xx=[-10:0.1:10];yy=-w(2,1)*xx/w(3,1)-w(1,1)/w(3,1);plot(xx,yy,'k');

测试结果,距离为1
这里写图片描述
距离为-5
这里写图片描述

0 0