Exercise: Logistic Regression and Newton's Method

转载 2016年05月31日 15:18:03

Exercise: Logistic Regression and Newton's Method

题目地址:

Exercise: Logistic Regression

题目概要:某个高中有80名学生,其中40名得到了大学的录取,40名没有被录取。x中包含80名学生两门标准考试的成绩,y中包含学生是否被录取(1代表录取、0代表未录取)。

过程:

1、加载试验数据,并为x输入添加一个偏置项。

x=load('ex4x.dat');
y=load('ex4y.dat');
x=[ones(length(y),1) x];

2、绘制数据分布

复制代码
 % find returns the indices of the
% rows meeting the specified condition
pos = find(y == 1); neg = find(y == 0);

% Assume the features are in the 2nd and 3rd
% columns of x
plot(x(pos, 2), x(pos,3), '+'); hold on
plot(x(neg, 2), x(neg, 3), 'o')
复制代码

3、Newton's method

先回忆一下logistic regression的假设:

因为matlab中没有sigmoid函数,因此我们用niline定义一个:

g = inline('1.0 ./ (1.0 + exp(-z))'); 
% Usage: To find the value of the sigmoid 
% evaluated at 2, call g(2)

再来看看我们定义的cost function J(θ):

我们希望使用Newton's method来求出cost function J(θ)的最小值。回忆一下Newton's method中θ的迭代规则为:

在logistic regression中,梯度和Hessian的求法分别为:

需要注意的是,上述公式中的写法为向量形式。

其中,为n+1 * 1的向量,为n+1 * n+1的矩阵。

为标量。

实现

 按照上述Newton's method所述的方法逐步实现。代码如下

复制代码
function [theta, J ] = newton( x,y )
%NEWTON Summary of this function goes here
%   Detailed explanation goes here
m = length(y);
theta = zeros(3,1);
g = inline('1.0 ./ (1.0 + exp(-z))'); 
pos = find(y == 1);
neg = find(y == 0);
J = zeros(10, 1); 
for num_iterations = 1:10
    %计算实际输出
    h_theta_x = g(x * theta);
    %将y=0和y=1的情况分开计算后再相加,计算J函数
    pos_J_theta = -1 * log(h_theta_x(pos));
    neg_J_theta = -1 *log((1- h_theta_x(neg)));
    J(num_iterations) = sum([pos_J_theta;neg_J_theta])/m;
    %计算J导数及Hessian矩阵
    delta_J = sum(repmat((h_theta_x - y),1,3).*x);
    H = x'*(repmat((h_theta_x.*(1-h_theta_x)),1,3).*x);
    %更新θ
    theta = theta - inv(H)*delta_J';
end
% now plot J
% technically, the first J starts at the zero-eth iteration
% but Matlab/Octave doesn't have a zero index
figure;
plot(0:9, J(1:10), '-')
xlabel('Number of iterations')
ylabel('Cost J')
end
复制代码

PS:在练习的附录答案中给出的直接计算J函数的代码很优雅:

J(i) =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h));

在matlab中调用:

[theta J] = newton(x,y);

可以得到输出:

θ为:

J函数输出图像为(令迭代次数为10的情况下):

可以看到,其实在迭代至第四次时,就已经收敛了。

我们可以输出一下admitted和unadmitted的分界线,代码如下:

复制代码
 plot(x(pos, 2), x(pos,3), '+'); hold on
plot(x(neg, 2), x(neg, 3), 'o')
ylabel('exam 2 scores')
xlabel('exam 1 scores')
plot(x(:,2), (theta(1) - x(:,2)*theta(2))/theta(3), '-');
legend('admitted', 'unadmitted','decision boundary');
复制代码

效果如图:

使用牛顿迭代方法(Newton’s method)来估计方程的解

假定现在我们想要估计f(x)=0的解,你可能从网上找到了某些所谓穷举得方法:从x=-100到x=1000,按给定一个递增因子一个一个数的代入f(x)中,所有满足f(x)=0的都是f(x)的解。想想就觉...
  • Allenalex
  • Allenalex
  • 2013年11月18日 16:33
  • 2312

史上最直白的logistic regression教程 之 一

Logistic Regession是什么Logistic Regression是线性回归,但最终是用作分类器。 为什么叫Logistic呢?因为它使用了Logisitic函数,形如: f(z)...
  • u011539200
  • u011539200
  • 2015年11月17日 15:11
  • 8039

logistic回归与牛顿法

在logistic回归中使用牛顿法,替代梯度下降法,解决梯度下降法迭代次数太多的问题。...
  • u012526120
  • u012526120
  • 2015年10月04日 16:38
  • 1779

不是回归的回归——Logistic Regression

关于Logistic Regression很多人都会有疑问:它用于分类问题,却为什么叫回归?Logistic Regression用到了一个常用的非线性函数——sigmoid函数,那它用于线性分类还是...
  • jteng
  • jteng
  • 2016年01月01日 15:49
  • 1518

机器学习算法之Logistic Regression算法实现

该代码基本上参考了zouxy09的专栏中的逻辑回归代码,他对于ML一些经典的算法都写得很不错,读后受益匪浅。 直接上代码: #-*- coding:utf8 -*- ''' 逻辑回归1.0 Au...
  • StephenFengz
  • StephenFengz
  • 2016年10月07日 23:10
  • 1074

台湾国立大学机器学习技法.听课笔记(第五讲) :Kernel Logistic Regression

台湾国立大学机器学习技法.听课笔记(第五讲)  :Kernel Logistic Regression 一,Soft-Margin SVM as Regularized Model 我们开始本lec...
  • huang1024rui
  • huang1024rui
  • 2015年09月17日 20:12
  • 893

【机器学习】Logistic Regression 的前世今生(理论篇)

Logistic Regression可以说是机器学习的入门算法。不过,你真的有把握能够把LR从头到脚讲一遍吗?你会现场建模,数学推导?你知道它的正则化的作用?你能讲清楚它跟MaxEnt最大熵模型的关...
  • cyh24
  • cyh24
  • 2015年12月19日 17:36
  • 13174

斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)”

转载来源:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%...
  • GraceDD
  • GraceDD
  • 2015年09月17日 10:30
  • 1058

关于logistic regression的前世今生

转载自: http://blog.csdn.net/cyh_24/article/details/50359055 写这篇博客的动力是源于看到了下面这篇微博: 我在看到这篇...
  • u014430697
  • u014430697
  • 2016年03月26日 15:22
  • 551

Coursera机器学习-第三周-逻辑回归Logistic Regression

Classification and Representation 1. Classification Linear Regression (线性回归)考虑的是连续值([0,1]之间的数)的问题,...
  • dingchenxixi
  • dingchenxixi
  • 2016年05月10日 10:41
  • 1816
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Exercise: Logistic Regression and Newton's Method
举报原因:
原因补充:

(最多只允许输入30个字)