Logistic Regression and Newton's Method

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

数据是40个考上大学的小朋友和40个没有考上大学的小朋友在两次测验中的成绩,和他们是否通过的标签。

根据数据建立这两次测验与是否进入大学的二分类模型。

在二分类任务中,我们需要找到一个函数,来拟合特征输入X和预测输出Y,理想的函数是阶跃函数,但是由于阶跃函数不具备良好的数学性质(如可导性),我们可以选择sigmoid函数。

牛顿法基本公式介绍

使用S函数

带入特征X之后,h(x)便可以看作是Y发生的概率,只是可以看作而已 。

损失函数J()定义为:
          

这个损失函数的定义是用的极大似然法,我们对对率回归模型最大化“对数似然”就可以得到,

极大似然本质就是让每个样本属于其真实标记的概率越大越好。

我们需要用牛顿法迭代参数来使损失函数达到最小值。

牛顿迭代公式如下

对应的梯度公式如下:

海森矩阵如下:

其中X(i)是n+1维的向量,X(i)*X(i)'是(n+1)*(n+1)的矩阵,而h(x(i))和y(i)是归一化以后的数据。

这个公式在代码实现的时候,有一点点需要注意的,正确实现如下:

H=1./m.*(x'*diag(h)*diag(1-h)'*x);

其中diag(h)*diag(1-h)'表示生成一个(n+1)*(n+1)矩阵,矩阵每一个对角元素是h*(1-h)。(我当时第一次敲公式的时候就直接敲成了h*(1-h)',结果死活迭代不对)

牛顿法对于迭代次数的要求不高,大约需要5-15次。但是牛顿法每次迭代的复杂度是O(n*3),

与梯度下降法相比,梯度法对迭代次数要求很高,但是每次迭代的复杂度是O(n)。

所以在选择数值优化算法进行凸优化的时候,当n<1000时,我们优先选用牛顿法,当n>1000时,我们选择梯度下降。

代码实现:

clc
clear all;
close all;
x = load('ex4x.dat');%加载数据
y = load('ex4y.dat');
%%%%--------------------数据预处理----------------------%%%%%%
m = length(y);
x = [ones(m, ), x];
% sigma = std(x);%取方差
% mu = mean(x);%取均值
% x(:,) = (x(:,) - mu())./ sigma();%归一化
% x(:,) = (x(:,) - mu())./ sigma();%归一化
g = inline('1.0 ./ (1.0 + exp(-z))');
theta = zeros(size(x(,:)))'; % initialize fitting parameters J = zeros(, ); %初始化损失函数
for num_iterations = :
h=g(x*theta);%计算S函数 deltaJ=/m.*x'*(h-y);%梯度 H = (/m).*x' * diag(h) * diag(1-h) * x; J(num_iterations) = /m*sum(-y'*log(h)-(1-y)'*log(-h));%牛顿法损失函数计算 theta = theta-H^(-)*deltaJ;%% 参数更新
end
x1=[,,];
h=g(x1*theta)%预测

最后预测出来的概率是这个小朋友通过测试的概率,为0.332;

另外,牛顿法并不要求数据归一化,当然,你也可以这样做。

deep learning 练习 牛顿法完成逻辑回归的更多相关文章

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

    前言: 在上一讲Deep learning:五(regularized线性回归练习)中已经介绍了regularization项在线性回归问题中的应用,这节主要是练习regularization项在lo ...

  2. Machine Learning in action --LogisticRegession 逻辑回归

    本系列主要参考<机器学习实战>,使用python3编译环境,实现书中的相关代码. 1.基本算法 关于梯度上升算法和随机梯度上升算法的选择: 当数据集较小时,使用梯度上升算法: 当数据集较大 ...

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

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

  4. Coursera Deep Learning笔记 逻辑回归典型的训练过程

    Deep Learning 用逻辑回归训练图片的典型步骤. 笔记摘自:https://xienaoban.github.io/posts/59595.html 1. 处理数据 1.1 向量化(Vect ...

  5. Deep Learning 学习笔记(4):Logistic Regression 逻辑回归

    逻辑回归主要用于解决分类问题,在现实中有更多的运用, 正常邮件or垃圾邮件 车or行人 涨价or不涨价 用我们EE的例子就是: 高电平or低电平 同时逻辑回归也是后面神经网络到深度学习的基础. (原来 ...

  6. [Deep Learning] 神经网络编程基础 (Basics of Neural Network Programming) - 逻辑回归-梯度下降-计算图

    在神经网络中,假如有m个训练集,我们想把他们加入训练,第一个想到得就是用一个for循环来遍历训练集,从而开始训练.但是在神经网络中,我们换一个计算方法,这就是 前向传播和反向传播. 对于逻辑回归,就是 ...

  7. 机器学习---三种线性算法的比较(线性回归,感知机,逻辑回归)(Machine Learning Linear Regression Perceptron Logistic Regression Comparison)

    最小二乘线性回归,感知机,逻辑回归的比较:   最小二乘线性回归 Least Squares Linear Regression 感知机 Perceptron 二分类逻辑回归 Binary Logis ...

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

    在<机器学习---逻辑回归(一)(Machine Learning Logistic Regression I)>一文中,我们讨论了如何用逻辑回归解决二分类问题以及逻辑回归算法的本质.现在 ...

  9. 机器学习---逻辑回归(一)(Machine Learning Logistic Regression I)

    逻辑回归(Logistic Regression)是一种经典的线性分类算法.逻辑回归虽然叫回归,但是其模型是用来分类的. 让我们先从最简单的二分类问题开始.给定特征向量x=([x1,x2,...,xn ...

随机推荐

  1. eclipse搭建servlet项目

    1.创建web项目 2.勾选Generate web.xml 3.创建Class文件并实现Servlet接口 当搜索Servlet接口时,如果未发现接口则Add library→选择tomcat版本至 ...

  2. The Swift Programming Language 英文原版官方文档下载

    The Swift Programming Language 英文原版官方文档下载 今天Apple公司发布了新的编程语言Swift(雨燕)将逐步代替Objective-C语言,大家肯定想学习这个语言, ...

  3. 《深入浅出Node.js》第5章 内存控制(未完)

    @by Ruth92(转载请注明出处) 第5章 内存控制 基于无阻塞.事件驱动建立的 Node 服务,具有内存消耗低的优点,非常适合处理海量的网络请求. 内存控制正是在海量请求和长时间运行的前提下进行 ...

  4. SQL --Chapter 04 数据更新

    数据的插入(INSERT语句的使用方法) INSERT INTO ShohinIns (shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, 原则上, ...

  5. SYSLOG审记日志的配置。

    前言 syslog是UNIX系统中提供的一种日志记录方法(RFC3164),syslog本身是一个服务器,程序中凡是使用syslog记录的信息都会发送到该服务器,服务器根据配置决定此信息是否记录,是记 ...

  6. Android之AnimationDrawable初识

    Drawable animation可以加载Drawable资源实现帧动画.AnimationDrawable是实现Drawable animations的基本类. 这里用AnimationDrawa ...

  7. 使用VC6开发opengl配置

    2015-11-09 22:25 VC6中工程创建: ​(1)创建一个Win32 Console Application.(以我创建的为例,工程名为simpleGL)   (2)链接OpenGL li ...

  8. CSS3的calc()使用

    CSS3的calc()使用 calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,用来指定元素的长度.比如说,你可以使用calc()给元素的border.margin.pad ...

  9. Your stream was neither an OLE2 stream, nor an OOXML stream.问题的解决

    先说说问题的来源 ,使用NPOI读取Except,先通过流来读取,如果符合要求,就将流保存为文件. 众所周知,流只能读一次,所以在流读取之前需要将流拷贝一份,保存文件的时候使用. protected ...

  10. code forces 383 Arpa's loud Owf and Mehrdad's evil plan(有向图最小环)

    Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 megab ...