在学习了线性回归与逻辑回归后,对其进行Matlab实现并总结如下:
(一) 运用Matlab内函数进行回归
%linear regression with matlab inner function
x=[1;2;3;4;5;6;7];
y=[2.1;5;5.8;8.2;10.5;11;15];
temp=ones(7,1);
X=[temp x];
b=regress(y,X)
z=b(1)+X*b(2);
plot(x,y,'or',x,z,'g');
xlabel('x');
ylabel('y');
title('Linear Regression with Matlab inner function');
grid on;
这是用Matlab内部的函数进行实现的,实现图如下:
b =
0.3143
1.9786
这里需要说明的是:这个例子实现的是一元一次的回归,当对多特征数据进行回归时,运用regress函数,同样可以实现线性回归。
另外,函数内部中的polyfit函数可实一元多项式的回归,而rstool可以实现多元二项式的回归,具体可参见Matlab help文档。
(二)运用梯度下降法进行Linear Regression
代码如下:
(1)
function [J,Gradient]=costfunction(theta)
%J :costfunction;
%Gradient
x=[1;2;3;4;5;6;7];
y=[2.1;5;5.8;8.2;10.5;11;15];
[m,n]=size(x);
h=theta(1)+theta(2)*x;
J=sum((h-y).^2)/(2*m);
Gradient(1)=sum(h-y)/m;
Gradient(2)=sum((h-y).*x)/m;
end
(2)
function [optTheta,functionVal,exitFlag]=Gradient_descent( )
options = optimset('GradObj','on','MaxIter',100);
initialTheta = zeros(2,1);
[optTheta,functionVal,exitFlag] = fminunc(@costfunction,initialTheta,options);
end
效果如下:
ans =
0.3143
1.9786
与(1)相比,结果是一样的。
这里需要说明的是optimset函数与fminunc函数,应该认真看下help说明。(运用这两个函数,函数内部自动取值learning rate)
(三)Logistic Regression
由于逻辑回归的实现与线性回归的实现在运用梯度下降法实现时,处cost function不同外其他皆同,故代码省略。
如果Logistic Regression的实现过程中用Regularizaion,只需要对cost function进项稍加改动即可。
(四)小结
1)这两个实例都是对简单数据的线性回归。
对Linear Regression而言:当处理多特征的数据时可以采用(a)regress(或profit等)函数进行回归,(b)运用梯度下降法实现的过程中增加cost function的元 数,另外再增加各个变量的梯度即可。
对Logistic Regression而言:其本质是二值分类问题{0,1},这样就遇到一个问题。(a)当实际的训练数据集是 two classes时,不管是是多特征的训练数据还是特征比较 少的数据,都可以参考Linear Regression的实现方法进行。(b)当实际的训练数据时mult-classes时,这时可以建立多个hypothesis function,当predict新的数据时,取使得hypothesis function最大的那个即可得到。
2)再次重申下:
a)当训练样本的特征长度不一时,在对其进行回归前应进行Feature Scaling或者Mean Normalization,以更快的收敛;
b)在进行Logistic Regression时为避免ovrfit,通常都会(1)减少数据中无关的特征(2)Regularization
(五)Matlab函数总结
常见的三维绘图函数:
linspace
meshgrid
mesh(可画出立体网状图)
surf(立体曲面图)
peaks(为了方便测试立体绘图, MATLAB提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点,其方程式为:
)、
meshz(可将曲面加上围裙)
waterfall(可在x方向或y方向产水流效果)、
meshc(同时画出网状图与等高线)、
surfc(同时画出曲面图与等高线)
contour3(画出曲面在三度空间 中的等高线)、
contour(画出曲面等高线在XY平面的投影)、
plot3(可画出三度空间中的曲线)
Reference:
http://blog.csdn.net/abcjennifer/article/details/7732417
http://cs.nju.edu.cn/yangxc/dcc2003.files/matlab1/matlabsimple/index-1.htm