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. ARM Linux Qt 5.x.x 无标题栏

    /********************************************************************************* * ARM Linux Qt 5. ...

  2. WPF学习笔记——依赖属性(Dependency Property)

    1.什么是依赖属性 依赖属性是一种可以自己没有值,并且通过Binding从数据源获得值(依赖在别人身上)的属性,拥有依赖属性的对象被称为"依赖对象". 依赖项属性通过调用 Regi ...

  3. Neo4j批量插入(Batch Insertion)

    新建一个maven工程,这里不赘述如何新建maven工程. 添加Neo4j jar到你的工程 有两种方式: 上网站官网下载jar包,根据自己的系统下载不同的压缩包,详细过程不描述,请自行搜索其他博客 ...

  4. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  5. js判断手机系统是iOS还是android

     var arg = navigator.platform;                            if(arg == "iPhone"){             ...

  6. Android ndk另一种注册方式

    不使用Java_com_xxx方式调用ndk的方式,这种方法的优点是灵活,可配置,不必限制在Java_com_xxx命名依赖中. 步骤如下: 第1步,在JNI初始化方法中调用自定义注册方法,并判断成功 ...

  7. JSP学习流程

  8. 简谈ashx

    是一般处理程序, 是asp.net web 组件的一种,ashx是其扩展名. 实现IHttpHandler接口,接收并处理http请求.这个接口有一个IsReusable成员,一个待实现的方法Proc ...

  9. 你应该知道的那些Android小经验

    原文出处:http://jayfeng.com/ 做Android久了,就会踩很多坑,被坑的多了就有经验了,闲暇之余整理了部分,现挑选一些重要或者偏门的“小”经验做个记录. 查看SQLite日志 ad ...

  10. Pads怎么设置某一网络的线宽

    在利用pads工具进行layout时,由于某一条网络可能会有很多条走线,而走线的宽度也相同,如果一条条设置,会很麻烦,所以pads中可以直接设置某一网络的线宽,避免繁琐的工作. 如下所示同一网络的走线 ...