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');
复制代码

效果如图:

举报

相关文章推荐

[Exercise 3] Logistic Regression and Newton's Method

这个练习将通过牛顿方法来实现逻辑回归分类。Dataex4Data.zip这里给出的训练样本的特征为80个学生的两门功课的分数. 样本值为对应的同学是否允许被上大学,如果是允许的话则用’1’表示,否则不...

Machine Learning Logistic Regression and Newton's Method Andrew Ng 课程练习 Matlab Script 详细解析

%% %For this exercise, suppose that a high school has a dataset representing 40 students ... %who we...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Logistic regression ,Softmax regression and Newton's method

首先说的是Logistic regression,z这个回归的相对还是比较简单的,但是一般来说他只能用于分两类(0或1)的情况,虽然我曾在Andrew Ng的课上好像记得也可以处理多类的情况,但是 S...

Exercise 4: Logistic Regressionand Newton's Method

Raw page: http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=e...

Coursera Machine Learning 第三周 quiz Programming Exercise 2: Logistic Regression

sigmoid.m function g = sigmoid(z) %SIGMOID Compute sigmoid functoon % J = SIGMOID(z) computes the ...

斯坦福大学机器学习公开课---Programming Exercise 2: Logistic Regression

斯坦福大学机器学习公开课:Programming Exercise 2: Logistic Regression---Matlab实现 1 Logistic Regression In this p...
  • E_pen
  • E_pen
  • 2015-02-03 21:15
  • 2172

Programming Exercise 2: Logistic Regression Machine Learning

大家好,今天总结Coursera网课上Andrew Ng MachineLearning 第二次作业 (1)sigmoid.mfunction g = sigmoid(z) %SIGMOID Com...

交叉熵在Cross-entropy error function and logistic regression

转载https://en.wikipedia.org/wiki/Cross_entropy In information theory, the cross entropy between ...
  • whiup
  • whiup
  • 2016-08-18 19:04
  • 266

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

形式: 采用sigmoid函数:g(z)=11+e−zg(z)=\frac{1}{1+e^{-z}} 其导数为g′(z)=(1−g(z))g(z)g^\prime(z)=(1-g(z))g(z...

CNTK入门03:CNTK 101: Logistic Regression and ML Primer

CNTK 101: Logistic Regression and ML Primer 参考:https://github.com/Microsoft/CNTK/blob/v2.0.rc2/Tut...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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