原文:http://blog.csdn.net/abcjennifer/article/details/7732417

本文为Maching Learning 栏目补充内容,为上几章中所提到单参数线性回归多参数线性回归和 逻辑回归的总结版。旨在帮助大家更好地理解回归,所以我在Matlab中分别对他们予以实现,在本文中由易到难地逐个介绍。
 
 

本讲内容:

Matlab 实现各种回归函数

=========================

基本模型

Y=θ01X1型---线性回归(直线拟合)

解决过拟合问题---Regularization

Y=1/(1+e^X)型---逻辑回归(sigmod 函数拟合)

=========================
 
第一部分:基本模型

 

在解决拟合问题的解决之前,我们首先回忆一下线性回归和逻辑回归的基本模型。

设待拟合参数 θn*1 和输入参数[ xm*n, ym*1 ] 。

对于各类拟合我们都要根据梯度下降的算法,给出两部分:

①   cost function(指出真实值y与拟合值h<hypothesis>之间的距离):给出cost function 的表达式,每次迭代保证cost function的量减小;给出梯度gradient,即cost function对每一个参数θ的求导结果。

function [ jVal,gradient ] = costFunction ( theta )

②   Gradient_descent(主函数):用来运行梯度下降算法,调用上面的cost function进行不断迭代,直到最大迭代次数达到给定标准或者cost function返回值不再减小。

function [optTheta,functionVal,exitFlag]=Gradient_descent( )

线性回归:拟合方程为hθ(x)=θ0x01x1+…+θnxn,当然也可以有xn的幂次方作为线性回归项(如),这与普通意义上的线性不同,而是类似多项式的概念。

其cost function 为:

逻辑回归:拟合方程为hθ(x)=1/(1+e^(θTx)),其cost function 为:

cost function对各θj的求导请自行求取,看第三章最后一图,或者参见后文代码。

后面,我们分别对几个模型方程进行拟合,给出代码,并用matlab中的fit函数进行验证。

 

 

第二部分:Y=θ01X1型---线性回归(直线拟合)
 

Matlab 线性拟合 & 非线性拟合中我们已经讲过如何用matlab自带函数fit进行直线和曲线的拟合,非常实用。而这里我们是进行ML课程的学习,因此研究如何利用前面讲到的梯度下降法(gradient descent)进行拟合。

cost function:
 function [ jVal,gradient ] = costFunction2( theta )
%COSTFUNCTION2 Summary of this function goes here
% linear regression -> y=theta0 + theta1*x
% parameter: x:m*n theta:n* y:m* (m=,n=)
% %Data
x=[;;;];
y=[1.1;2.2;2.7;3.8];
m=size(x,); hypothesis = h_func(x,theta);
delta = hypothesis - y;
jVal=sum(delta.^); gradient()=sum(delta)/m;
gradient()=sum(delta.*x)/m; end

其中,h_func是hypothesis的结果:

 function [res] = h_func(inputx,theta)
%H_FUNC Summary of this function goes here
%   Detailed explanation goes here %cost function
res= theta()+theta()*inputx;function [res] = h_func(inputx,theta)
end

Gradient_descent:

 function [optTheta,functionVal,exitFlag]=Gradient_descent( )
%GRADIENT_DESCENT Summary of this function goes here
% Detailed explanation goes here options = optimset('GradObj','on','MaxIter',);
initialTheta = zeros(,);
[optTheta,functionVal,exitFlag] = fminunc(@costFunction2,initialTheta,options); end

result:

 >> [optTheta,functionVal,exitFlag] = Gradient_descent()

 Local minimum found.

 Optimization completed because the size of the gradient is less than
the default value of the function tolerance. <stopping criteria details> optTheta = 0.3000
0.8600 functionVal = 0.0720 exitFlag =
即得y=0.3+0.86x;
验证:
 function [ parameter ] = checkcostfunc(  )
%CHECKC2 Summary of this function goes here
% check if the cost function works well
% check with the matlab fit function as standard %check cost function
x=[;;;];
y=[1.1;2.2;2.7;3.8]; EXPR= {'x',''};
p=fittype(EXPR);
parameter=fit(x,y,p); end

运行结果:

 >> checkcostfunc()

 ans = 

      Linear model:
ans(x) = a*x + b
Coefficients (with % confidence bounds):
a = 0.86 (0.4949, 1.225)
b = 0.3 (-0.6998, 1.3)

和我们的结果一样。下面画图:

 function PlotFunc( xstart,xend )
%PLOTFUNC Summary of this function goes here
% draw original data and the fitted %===================cost function ====linear regression
%original data
x1=[;;;];
y1=[1.1;2.2;2.7;3.8];
%plot(x1,y1,'ro-','MarkerSize',);
plot(x1,y1,'rx','MarkerSize',);
hold on; %fitted line - 拟合曲线
x_co=xstart:0.1:xend;
y_co=0.3+0.86*x_co;
%plot(x_co,y_co,'g');
plot(x_co,y_co); hold off;
end
 
 
第三部分:解决过拟合问题---Regularization
 

过拟合问题解决方法我们已在第三章中讲过,利用Regularization的方法就是在cost function中加入关于θ的项,使得部分θ的值偏小,从而达到fit效果。

例如定义costfunction J(θ): jVal=(theta(1)-5)^2+(theta(2)-5)^2;

在每次迭代中,按照gradient descent的方法更新参数θ:θ(i)-=gradient(i),其中gradient(i)是J(θ)对θi求导的函数式,在此例中就有gradient(1)=2*(theta(1)-5), gradient(2)=2*(theta(2)-5)。

函数costFunction, 定义jVal=J(θ)和对两个θ的gradient:

 function [ jVal,gradient ] = costFunction( theta )
%COSTFUNCTION Summary of this function goes here
% Detailed explanation goes here jVal= (theta()-)^+(theta()-)^; gradient = zeros(,);
%code to compute derivative to theta
gradient() = * (theta()-);
gradient() = * (theta()-); end

Gradient_descent,进行参数优化

 function [optTheta,functionVal,exitFlag]=Gradient_descent( )
%GRADIENT_DESCENT Summary of this function goes here
% Detailed explanation goes here options = optimset('GradObj','on','MaxIter',);
initialTheta = zeros(,)
[optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options); end

matlab主窗口中调用,得到优化厚的参数(θ1,θ2)=(5,5)

  [optTheta,functionVal,exitFlag] = Gradient_descent()

 initialTheta =

 Local minimum found.

 Optimization completed because the size of the gradient is less than
the default value of the function tolerance. <stopping criteria details> optTheta = functionVal = exitFlag =

第四部分:Y=1/(1+e^X)型---逻辑回归(sigmod 函数拟合)

hypothesis function:

 function [res] = h_func(inputx,theta)

 %cost function
tmp=theta()+theta()*inputx;%m*
res=./(+exp(-tmp));%m* end

cost function:

 function [ jVal,gradient ] = costFunction3( theta )
%COSTFUNCTION3 Summary of this function goes here
% Logistic Regression x=[-; -; -; ; ; ; ];
y=[0.01; 0.05; 0.3; 0.45; 0.8; 1.1; 0.99];
m=size(x,); %hypothesis data
hypothesis = h_func(x,theta); %jVal-cost function & gradient updating
jVal=-sum(log(hypothesis+0.01).*y + (-y).*log(-hypothesis+0.01))/m;
gradient()=sum(hypothesis-y)/m; %reflect to theta1
gradient()=sum((hypothesis-y).*x)/m; %reflect to theta end

Gradient_descent:

 function [optTheta,functionVal,exitFlag]=Gradient_descent( )

  options = optimset('GradObj','on','MaxIter',);
initialTheta = [;];
[optTheta,functionVal,exitFlag] = fminunc(@costFunction3,initialTheta,options); end

运行结果:

  [optTheta,functionVal,exitFlag] = Gradient_descent()

 Local minimum found.

 Optimization completed because the size of the gradient is less than
the default value of the function tolerance. <stopping criteria details> optTheta = 0.3526
1.7573 functionVal = 0.2498 exitFlag =
 

画图验证:

 
 
 
有朋友问,这里就补充一下logistic regression中gradient的推导:
则有
由于cost function
可得
所以gradient = -J'(theta) = (z-y)x

Matlab实现线性回归和逻辑回归: Linear Regression & Logistic Regression的更多相关文章

  1. 逻辑回归模型(Logistic Regression)及Python实现

    逻辑回归模型(Logistic Regression)及Python实现 http://www.cnblogs.com/sumai 1.模型 在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳 ...

  2. 斯坦福机器学习视频笔记 Week3 逻辑回归与正则化 Logistic Regression and Regularization

    我们将讨论逻辑回归. 逻辑回归是一种将数据分类为离散结果的方法. 例如,我们可以使用逻辑回归将电子邮件分类为垃圾邮件或非垃圾邮件. 在本模块中,我们介绍分类的概念,逻辑回归的损失函数(cost fun ...

  3. 斯坦福CS229机器学习课程笔记 part2:分类和逻辑回归 Classificatiion and logistic regression

    Logistic Regression 逻辑回归 1.模型 逻辑回归解决的是分类问题,并且是二元分类问题(binary classification),y只有0,1两个取值.对于分类问题使用线性回归不 ...

  4. 分类和逻辑回归(Classification and logistic regression)

    分类问题和线性回归问题问题很像,只是在分类问题中,我们预测的y值包含在一个小的离散数据集里.首先,认识一下二元分类(binary classification),在二元分类中,y的取值只能是0和1.例 ...

  5. 逻辑回归(分类问题)(Logistic Regression、罗杰斯特回归)

    逻辑回归:问题只有两项,即{0, 1}.一般而言,回归问题是连续模型,不用在分类问题上,且噪声较大,但如果非要引入,那么采用逻辑回归模型. 对于一般训练集: 参数系统为: 逻辑回归模型为:      ...

  6. 吴恩达机器学习笔记22-正则化逻辑回归模型(Regularized Logistic Regression)

    针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数

  7. 机器学习算法笔记1_2:分类和逻辑回归(Classification and Logistic regression)

    形式: 採用sigmoid函数: g(z)=11+e−z 其导数为g′(z)=(1−g(z))g(z) 如果: 即: 若有m个样本,则似然函数形式是: 对数形式: 採用梯度上升法求其最大值 求导: 更 ...

  8. 逻辑回归原理 面试 Logistic Regression

    逻辑回归是假设数据服从独立且服从伯努利分布,多用于二分类场景,应用极大似然估计构造损失函数,并使用梯度下降法对参数进行估计.

  9. 吴恩达深度学习:2.9逻辑回归梯度下降法(Logistic Regression Gradient descent)

    1.回顾logistic回归,下式中a是逻辑回归的输出,y是样本的真值标签值 . (1)现在写出该样本的偏导数流程图.假设这个样本只有两个特征x1和x2, 为了计算z,我们需要输入参数w1.w2和b还 ...

随机推荐

  1. Linq之Linq to Objects

    目录 写在前面 系列文章 linq to objects 总结 写在前面 上篇文章介绍了linq的延迟加载特性的相关内容,从这篇文章开始将陆续介绍linq to Objects,linq to xml ...

  2. 6、面向对象以及winform的简单运用(抽象基类与接口)

    抽象类与抽象方法 1.书写规范: 在类前面加上abstract关键字,就成为了抽象类:在一个方法前面加上abstract关键字,就成为了抽象方法(抽象方法不能有实现方法,直接在后面加分号) 例: ab ...

  3. iOS边练边学--NSURLSessionDataTask实现文件真正的断点续传

    实现重点: NSURLSessionDataTask要设置请求头,从路径中获取文件已经下载的长度(文件没有下载过的话,长度为0).通过这个长度设置请求的Range 如图: 接收到请求的时候key:文件 ...

  4. myeclipse-建立webservice服务端和客户端

    一.建立webservice服务端: 1.新建一个web service project,名称为webservice_server截图如下,点击finish. 2.选择工程,点击右键,选择new-&g ...

  5. 【codevs1044】导弹拦截问题与Dilworth定理

    题目描述 Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某 ...

  6. iOS8跳到系统设置页面

    iOS5.1+之后跳转setting页面的方式都失效了,不过在iOS8苹果有提供了一个键值允许app跳转到setting页面,具体代码如下: NSURL *url = [NSURL URLWithSt ...

  7. 001-编译hadoop-2.5.2总结

    前两天废了很大的劲来对hadoop-2.5.2进行64位系统的手动编译,由于对linux系统环境以及hadoop本身的不熟悉,编译过程中也出现了很多的问题,在此记录一下,对自己以后再次编译和看到此文章 ...

  8. spring 第一篇(1-1):让java开发变得更简单(下)转

    spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...

  9. 【poj2186】 Popular Cows

    http://poj.org/problem?id=2186 (题目链接) 题意 给出一个n个点m条边的有向图,求其中没有出度强连通分量所包含的点有几个 Solution 其实这道题的题解已经在“题意 ...

  10. POJ2187 Beauty Contest

    Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest, ea ...