__2018-01-17 如一模式识别研究

如一模式识别研究

matlab>>机器学习(三)之Matlab实现的函数总结

转自:http://blog.csdn.net/wingofeagle/article/details/8907670

在学习了线性回归与逻辑回归后,对其进行Matlab实现并总结如下:

(一) 运用Matlab内函数进行回归

[cpp] view plaincopy

%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)

[cpp] view plaincopy

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)

[cpp] view plaincopy

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

评论留言区

:
  

作者: 游客 ; *
评论内容: *
带*号为必填项目

如一模式识别更新提示

matlab在图像处理方面的应用有更新

如一模式识别 友情链接

关于本站作者     chinaw3c     mozilla