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. 几个linux终端的有趣玩法

    1.sl 还可以给别人搞恶作剧: alias ls=sl 这样别人使用 ls 列出目录和文件的时候,却出现一个小火车,那滋味一定很酸爽哈哈哈哈! 2. fortune 这个命令会随机输出有趣的话,比如 ...

  2. Lua table库整理(v5.1)

    这个库提供了表处理的通用函数. 所有函数都放在表 table. 无论何时,若一个操作需要取表的长度, 这张表必须是一个真序列. table.concat(list, [, sep, [, i , [, ...

  3. Array.splice()理解记忆

    var arr = [0,1,2,3,4,5,6,7,8,9]; arr.splice(0,0,"添加项1"); //arr => ["添加项",0,1, ...

  4. folly::AtomicHashmap源码分析(二)

    本文为原创,转载请注明:http://www.cnblogs.com/gistao/ 背景 上一篇只是细致的把源码分析了一遍,而源码背后的设计思想并没有写,设计思想往往是最重要的,没有它,基本无法做整 ...

  5. Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]

    有时候在xml中写的跑马灯效果不滚动:原因有以下 Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize=”marquee” 2.TextV ...

  6. css中的大小、定位、轮廓相关属性

    css中的大小.定位.轮廓相关属性 1.通过height.width属性控制组件大小 height:高度,可以设置任何有效的距离值: width:宽度,可以设置任何有效的属性值: max-height ...

  7. cannot simultaneously fetch multiple bags

    问题是什么时候出现的呢?    当一个实体对象中包含多于一个non-lazy获取策略时,比如@OneToMany,@ManyToMany或者@ElementCollection时,获取策略为(fetc ...

  8. psp记录个人项目花费时间

    预估时间 120min 设计分析时间 30min 具体设计时间 ≍40min 编码时间 ≍1h 测试时间 10min 整理结论时间 10min 总结与探讨时间 5min

  9. C# Redis Server分布式缓存编程 --网络转载

    这篇文章我将介绍如果用最简洁的方式配置Redis Server, 以及如何使用C#和它交互编程 一. 背景介绍 Redis是最快的key-value分布式缓存之一 缺点: 没有本地数据缓冲, 目前还没 ...

  10. 1月12日,HTML学习笔记2

    妈蛋,这两天看HTML看上瘾了,感觉这玩意有点简单,反馈期太短了,我的python都荒废了/(ㄒoㄒ)/~~. 不多说了,把记录贴上来,到时过几天再拿出来整理一下,写上注释,顺便当做复习 去研究css ...