Deep learning:四(logistic regression练习)

  前言:

  本节来练习下logistic regression相关内容,参考的资料为网页:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html。这里给出的训练样本的特征为80个学生的两门功课的分数,样本值为对应的同学是否允许被上大学,如果是允许的话则用’1’表示,否则不允许就用’0’表示,这是一个典型的二分类问题。在此问题中,给出的80个样本中正负样本各占40个。而这节采用的是logistic regression来求解,该求解后的结果其实是一个概率值,当然通过与0.5比较就可以变成一个二分类问题了。

实验数据:

下载数据 ex4Data.zip

    实验基础:

  在logistic regression问题中,logistic函数表达式如下:

  

  这样做的好处是可以把输出结果压缩到0~1之间。而在logistic回归问题中的损失函数与线性回归中的损失函数不同,这里定义的为:

  

  如果采用牛顿法来求解回归方程中的参数,则参数的迭代公式为:

  

  其中一阶导函数和hessian矩阵表达式如下:

  

可能有些朋友,不太清楚上面这两个式子是怎么推导出来的,第一个式子比较简单就是J对theta求导,一阶导数而已,具体求导过程可以参考牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4中的总结2,而第二个式子就是对对第一个式子再次求导,相当于J的二阶导数。至于为什么要求一阶导数与二阶导数不清楚的可参考总结2以及上文。

  一些matlab函数:

  find:

  是找到的一个向量,其结果是find函数括号值为真时的值的下标编号。

  inline:

  构造一个内嵌的函数,很类似于我们在草稿纸上写的数学推导公式一样。参数一般用单引号弄起来,里面就是函数的表达式,如果有多个参数,则后面用单引号隔开一一说明。比如:g = inline(‘sin(alpha*x)‘,‘x‘,‘alpha‘),则该二元函数是g(x,alpha) = sin(alpha*x)。

  实验结果:

  训练样本的分布图以及所学习到的分类界面曲线:

  

  损失函数值和迭代次数之间的曲线:

  

  最终输出的结果:

  

  可以看出当一个小孩的第一门功课为20分,第二门功课为80分时,这个小孩不允许上大学的概率为0.6680,因此如果作为二分类的话,就说明该小孩不会被允许上大学。

  实验代码(原网页提供):

% Exercise 4 -- Logistic Regression

clear all; close all; clc

x = load(‘ex4x.dat‘); 
y = load(‘ex4y.dat‘);%加载数据

[m, n] = size(x);    %数据为m行n列

% Add intercept term to x
x = [ones(m, 1), x]; 

% Plot the training data
% Use different markers for positives and negatives
figure
pos = find(y); neg = find(y == 0);%正例与反例
plot(x(pos, 2), x(pos,3), ‘+‘)    %正例用“+”,反例用“o”标注
hold on
plot(x(neg, 2), x(neg, 3), ‘o‘)
hold on
xlabel(‘Exam 1 score‘)
ylabel(‘Exam 2 score‘)

% Initialize fitting parameters
theta = zeros(n+1, 1);

% Define the sigmoid function
g = inline(‘1.0 ./ (1.0 + exp(-z))‘); 

% Newton‘s method
MAX_ITR = 7;
J = zeros(MAX_ITR, 1);

for i = 1:MAX_ITR
    % Calculate the hypothesis function
    z = x * theta;
    h = g(z);
    
    % Calculate gradient and hessian.
    % The formulas below are equivalent to the summation formulas
    % given in the lecture videos.
    grad = (1/m).*x‘ * (h-y);
    H = (1/m).*x‘ * diag(h) * diag(1-h) * x;
    
    % Calculate J (for testing convergence)
    J(i) =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h));
    
    theta = theta - H\grad;
end
% Display theta
theta

% Calculate the probability that a student with
% Score 20 on exam 1 and score 80 on exam 2 
% will not be admitted
prob = 1 - g([1, 20, 80]*theta)

% Plot Newton‘s method result
% Only need 2 points to define a line, so choose two endpoints
plot_x = [min(x(:,2))-2,  max(x(:,2))+2];
% Calculate the decision boundary line
plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));
plot(plot_x, plot_y)
legend(‘Admitted‘, ‘Not admitted‘, ‘Decision Boundary‘)
hold off

% Plot J
figure
plot(0:MAX_ITR-1, J, ‘o--‘, ‘MarkerFaceColor‘, ‘r‘, ‘MarkerSize‘, 8)
xlabel(‘Iteration‘); ylabel(‘J‘)
% Display J
J 

参考文献:

http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html

http://www.cnblogs.com/tornadomeet/archive/2013/03/16/2963919.html

时间: 2024-10-27 18:27:15

Deep learning:四(logistic regression练习)的相关文章

转载 Deep learning:四(logistic regression练习)

前言: 本节来练习下logistic regression相关内容,参考的资料为网页:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html.这里给出的训练样本的特征为80个学生的两门功课的分数,样本值为对应的同学是否允许被上大学,如果是允许的话则用'1'表示,否则不允许就用'0'表示,这是一个典型的二分类问题.在此问题中,给出的80个

CheeseZH: Stanford University: Machine Learning Ex2:Logistic Regression

1. Sigmoid Function In Logisttic Regression, the hypothesis is defined as: where function g is the sigmoid function. The sigmoid function is defined as: 2.Cost function and gradient The cost function in logistic regression is: the gradient of the cos

[Google Deep Learning 笔记] Logistic Classification

Logistic Classification Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 About simple but important classifier Train your first simple model entirely end to end 下载.预处理一些图片以分类 Run an actual logistic classifier on i

Machine Learning - VI. Logistic Regression (Week 3)

http://blog.csdn.net/pipisorry/article/details/43884027 机器学习Machine Learning - Andrew NG courses学习笔记 Classification  0.1表示含义 denote with 0 is the negative class denote with 1 is the positive class.  Hypothesis Representation  Decision Boundary  Cost

Deep Learning Tutorial - Classifying MNIST digits using Logistic Regression

Deep Learning Tutorial 由 Montreal大学的LISA实验室所作,基于Theano的深度学习材料.Theano是一个python库,使得写深度模型更容易些,也可以在GPU上训练深度模型.所以首先得了解python和numpy.其次,阅读Theano basic tutorial. Deep Learning Tutorial 包括: 监督学习算法: Logistic Regression - using Theano for something simple Multi

Deep Learning for Nature Language Processing --- 第四讲(下)

A note on matrix implementations 将J对softmax的权重W和每个word vector进行求导: 尽量使用矩阵运算(向量化),不要使用for loop. 模型训练中有两个开销比较大的运算:矩阵乘法f=Wx和指数函数exp Softmax(=logistic regression) is not very powerful softmax只是在原来的向量空间中给出了一些linear decision boundary(线性决策线),在小的数据集上有很好的regu

机器学习---逻辑回归(二)(Machine Learning Logistic Regression II)

在<机器学习---逻辑回归(一)(Machine Learning Logistic Regression I)>一文中,我们讨论了如何用逻辑回归解决二分类问题以及逻辑回归算法的本质.现在来看一下多分类的情况. 现实中相对于二分类问题,我们更常遇到的是多分类问题.多分类问题如何求解呢?有两种方式.一种是方式是修改原有模型,另一种方式是将多分类问题拆分成一个个二分类问题解决. 先来看一下第一种方式:修改原有模型.即:把二分类逻辑回归模型变为多分类逻辑回归模型. (二分类逻辑回归称为binary

Deep Learning(深度学习)学习笔记整理系列之(四)——CNN

[email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-04-08 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈

转载 Deep learning:六(regularized logistic回归练习)

前言: 在上一讲Deep learning:五(regularized线性回归练习)中已经介绍了regularization项在线性回归问题中的应用,这节主要是练习regularization项在logistic回归中的应用,并使用牛顿法来求解模型的参数.参考的网页资料为:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html.要解决的