deep learning学习(四) 逻辑斯蒂(logistic)回归深入理解和matlab程序求参数

第一节中说了,logistic 回归和线性回归的区别是:线性回归是根据样本X各个维度的Xi的线性叠加(线性叠加的权重系数wi就是模型的参数)来得到预测值的Y,然后最小化所有的样本预测值Y与真实值y‘的误差来求得模型参数。我们看到这里的模型的值Y是样本X各个维度的Xi的线性叠加,是线性的。

Y=WX (假设W>0),Y的大小是随着X各个维度的叠加和的大小线性增加的,如图(x为了方便取1维):

然后再来看看我们这里的logistic 回归模型,模型公式是:,这里假设W>0,Y与X各维度叠加和(这里都是线性叠加W)的图形关系,如图(x为了方便取1维):

我们看到Y的值大小不是随X叠加和的大小线性的变化了,而是一种平滑的变化,这种变化在x的叠加和为0附近的时候变化的很快,而在很大很大或很小很小的时候,X叠加和再大或再小,Y值的变化几乎就已经很小了。当X各维度叠加和取无穷大的时候,Y趋近于1,当X各维度叠加和取无穷小的时候,Y趋近于0.

这种变量与因变量的变化形式就叫做logistic变化。(注意不是说X各个维度和为无穷大的时候,Y值就趋近1,这是在基于W>0的基础上,(如果W<0,n那么Y趋近于0)而W是根据样本训练出来,可能是大于0,也可能是小0,还可能W1>0,W2<0…所以这个w值是样本自动训练出来的,也因此不是说你只要x1,x2,x3…各个维度都很大,那么Y值就趋近于1,这是错误的。凭直觉想一下也不对,因为你连样本都还没训练,你的模型就有一个特点:X很大的时候Y就很大。这种强假设肯定是不对的。因为可能样本的特点是X很大的时候Y就很小。)

所以我们看到,在logistic回归中,X各维度叠加和(或X各维度)与Y不是线性关系,而是logistic关系。而在线性回归中,X各维度叠加和就是Y,也就是Y与X就是线性的了。

X各维度叠加和Y的关系不只是这一种,还可能是其他的比如:

为什么变量与因变量要选用logistic关系呢,因为这里(1)我们需要Y代表的是概率即Y∈(0,1)。(2)我们需要X各维度叠加和在0附近变化幅度比较大,并且是非线性的变化。而在很大或很小的时候,几乎不变化,这是基于概率的一种认识与需要。感性的一个例子,想想你学习努力的程度与从60分提高到80分和80提高到100分并不是线性的。(3)这个关系的公式要在之后形成的cost function是凸函数。

所以就选择了logistic。

前面已经说了,我们使用logistic回归是用于二分类问题(y只有两个值A,B,也可以写成1和0,这都没关系),回归模型得到的结果不是预测样本X对应的y值(注意下,在logistic回归这里我们小写y表示某个样本Xi的类别,而大写Y或Y(Xi)表示logistic回归模型对某个样本Xi预测为1的概率。其实这里最好把Y用其他字母表示,以免混淆,但是已经这里写了,以后注意。),而是y=1的概率或y=0的概率。我们假设y=1的概率公式是:,那么y=0的概率就是。(注意我们也可以y=0的概率公式为前面那一个,这里是任意的。这里不同的结果只是最终的W参数不同罢了。因为我们最终的W是训练出来的,不管怎么样,模型都会表现出样本的特点来。只是我们习惯了把Y(X)当成y=1的logistic模型映射的概率)

还要注意这里我们不是对一个Xi都要分别预测出来y=1的概率和y=0的概率。而是对于一个Xi,如果它的yi=1,那么我们就用这个公式映射所对应的概率,如果对于一个Xi,如果它的yi=0,那么我们就用这个公式映射所对应的概率。都是根据yi的值映射出来一个概率。

因为我们的Y是概率,我们不能利用最小误差等,我们这里用的是极大化所有样本的对数似然函数:

yi表示的是Xi真实所属的类别(1或0)。L(W)就是cost function。这里的目标函数值和W有关系,也就是X各维度线性叠加的那些权重有关系。

那么这些权重的物理意义是什么呢?就是X各维度与Y值关系的那个方向,听起来可能很抽象,现在看一下具体例子(X为二维,但考虑将常数项变成齐次后X就是三维了,第一维是1,因此W也是三维的,第一维是常数项,大小不影响那个方向,主要考虑后面的两个值的关系),比如:

当W=[-15 0.2 0.2],图形为:(一种45°方向的关系)

当W=[-15 -0.2 -0.2],图形为:(一种-45°方向的关系)

当W=[-15 0.2 0.01],图形为:(一种0°方向(沿x轴形成的logistic关系)的关系)

当W=[-15 0.01 0.2],图形为:(一种90°方向(沿y轴形成的logistic关系)的关系)

下面我们对L(W)求极值。

L(W)是negtive 的似然函数。只有是negtive的,才能用梯度下降法求最小值,如果不是negtive的,就要用梯度上升法求最大值了,我们一般不用那个。还要注意我们的代价函数不管是最小二乘法、误差均方、似然函数等,都要求平均,就是前面加上1/m.利用梯度下降法求得的迭代公式是:,其中wj代表的是模型参数向量W的第j个元素。

α代表的是学习速率,yi表示的是第i个样本向量的真实标签(label),也就是第i个样本向量所属的类别(0或1),Y(Xi)表示的是回归模型预测的第i个样本向量为1的概率。xij表示的第i个样本向量Xi的第j个元素。小心不要忘了Σ(i=1:m)(注意因为梯度下降法梯度是目标函数分别对模型参数向量W的第每一个元素求偏导,所以这里W的第每一个元素的值是一个一个求出来的。当然在matlab中,虽然是按向量导入计算的数据,但是本质上还是一个一个计算的w的每个值,而不是直接求的这个向量是多少)

我们注意到这个迭代公式和线性回归的迭代公式形式是一样的,只是在线性回归中Y(Xi)为Xi的各维度线性叠加即WXi=WXi,而这里Xi的各维度线性叠加WXi以后,还要进行一次非线性映射(即logistic映射),非线性的映射到(0,1)之间Y(Xi)。所以也可以认为logstic回归也是处理的线性问题,即也是求的各维度线性叠加的权重系数,只是求得了各维度线性叠加和以后,不是与Xi所属的类别进行比较,而是非线性映射到所属类别的概率,然后最大似然函数法求模型参数(也就是那个各维度线性叠加的权重,而后面的非线性映射logstic那里没有参数)。

下面说一个例子:训练样本的特征为80个学生的两门功课的分数,样本值yi为对应的同学是否允许被上大学。训练好以后,用训练好的模型根据某个学生的成绩预测是否被允许上大学?数据中给出被允许上大学为1,不被允许上大学为0。

程序代码(梯度下降法):

   1: clear all; close all; clc
   2: x = load(‘ex4x.dat‘); %每一行是一个样本

   3: y = load(‘ex4y.dat‘);

   4: [m, n] = size(x);

   5: sample_num = m;

   6: x = [ones(m, 1), x]; %x增加一维。因为前面文字或前几节说了

   7: % Plot the training data

   8: % Use different markers for positives and negatives

   9: figure;

  10: pos = find(y == 1); neg = find(y == 0);%pos 和neg 分别是 y元素=1和0的所在的位置序号组成的向量

  11: plot(x(pos, 2), x(pos,3), ‘+‘)%用+表示那些yi=1所对应的样本

  12: hold on

  13: plot(x(neg, 2), x(neg, 3), ‘o‘)

  14: hold on

  15: xlabel(‘Exam 1 score‘)

  16: ylabel(‘Exam 2 score‘)

  17: itera_num=500;%迭代次数

  18: g = inline(‘1.0 ./ (1.0 + exp(-z))‘); %这个就相当于制造了一个function g(z)=1.0 ./ (1.0 + exp(-z))

  19: plotstyle = {‘b‘, ‘r‘, ‘g‘, ‘k‘, ‘b--‘, ‘r--‘};

  20: figure;%建立新的窗口

  21: alpha = [ 0.0009, 0.001,0.0011,0.0012,0.0013 ,0.0014 ];%下面就分别用这几个学习速率看看哪个更好

  22: for alpha_i = 1:length(alpha) %alpha_i是1,2,...6,表示的是学习速率向量和曲线格式向量的坐标:alpha(alpha_i),plotstyle(alpha_i)

  23:     theta = zeros(n+1, 1);%thera表示样本Xi各个元素叠加的权重系数,这里以向量形式表示,且初始都为0,三维向量

  24:     J = zeros(itera_num, 1);%J是个100*1的向量,第n个元素代表第n次迭代cost function的值(下面用negtive 的对数似然函数,

  25:     %因为是negtive 的,所以是求得极小值)

  26:     for i = 1:itera_num %计算出某个学习速率alpha下迭代itera_num次数后的参数   

  27:         z = x * theta;%这个z是一个列向量,每一个元素是每一个样本Xi的线性叠加和,因为X是所有的样本,因此这里不是一个一个样本算的,

  28:         %而是所有样本一块算的,因此z是一个包含所有样本Xi的线性叠加和的向量。在公式中,是单个样本表示法,而在matlab中都是所有的样本一块来。

  29:         h = g(z);%这个h就是样本Xi所对应的yi=1时,映射的概率。如果一个样本Xi所对应的yi=0时,对应的映射概率写成1-h。

  30:         J(i) =(1/sample_num).*sum(-y.*log(h) - (1-y).*log(1-h));%损失函数的矢量表示法 这里Jtheta是个100*1的列向量。

  31:         grad = (1/sample_num).*x‘*(h-y);%这个是向量形式的,我们看到grad在公式中是gradj=1/m*Σ(Y(Xi)-yi)Xij ,写得比较粗略,

  32:         %这里(Y(Xi)-yi)、Xij %都是标量,而在程序中是以向量的形式运算的,所以不能直接把公式照搬,所以要认真看看,代码中相应改变一下。

  33:         theta = theta - alpha(alpha_i).*grad;

  34:     end

35:     plot(0:itera_num-1, J(1:itera_num),char(plotstyle(alpha_i)),‘LineWidth‘, 2)

%此处一定要通过char函数来转换因为包用()索引后得到的还是包cell,

  36:     %所以才要用char函数转换,也可以用{}索引,这样就不用转换了。

  37:     %一个学习速率对应的图像画出来以后再画出下一个学习速率对应的图像。    

  38:     hold on

  39:     if(1 == alpha(alpha_i)) %通过实验发现alpha为0.0013 时效果最好,则此时的迭代后的theta值为所求的值

  40:         theta_best = theta;

  41:     end

  42: end

  43: legend(‘0.0009‘, ‘0.001‘,‘0.0011‘,‘0.0012‘,‘0.0013‘ ,‘0.0014‘);%给每一个线段格式标注上

  44: xlabel(‘Number of iterations‘)

  45: ylabel(‘Cost function‘)

46: prob = g([1, 20, 80]*theta);

%把[1, 20, 80]*theta这个带入g(z)得到的就是在exam1=20、exam2=80的条件下,通过的概率(也就是Y=1)的概率是多少。

  47: %画出分界面

  48: % Only need 2 points to define a line, so choose two endpoints

  49: plot_x = [min(x(:,2))-2,  max(x(:,2))+2];%两个点就可以画出来直线,这里这么取x1坐标是让直接的视野更容易包含那些样本点。

50: plot_y = (-1./theta(3)).*(theta(2).*plot_x +theta(1));%分界面怎么画呢?问题也就是在x1,x2坐标图中找到

%那些将x1,x2带入1/(1+exp(-wx))后,使其值>0.5的(x1,x2)

  51: %坐标形成的区域,因为我们知道1/(1+exp(-wx))>0.5

52: %意味着该区域的(x1,x2)表示的成绩允许上大学的概率>0.5,那么其他的区域就是不被允许上大学,那么1/(1+exp(-wx))=0.5解出来的一个关

%于x1,x2的方程就是那个分界面。

  53: %我们解出来以后发现,这个方程是一个直线方程:w(2)x1+w(3)x2+w(1)=0

54: %注意我们不能因为这个分界面是直线,就认为logistic回归是一个线性分类器,注意logistic回归不是一个分类器,他没有分类的功能,

%这个logistic回归是用来

55: %预测概率的,这里具有分类功能是因为我们硬性规定了一个分类标准:把>0.5的归为一类,<0.5的归于另一类。这是一个很强的假设,

%因为本来我们可能预测了一个样本

56: %所属某个类别的概率是0.6,这是一个不怎么高的概率,但是我们还是把它预测为这个类别,只因为它>0.5.所以最后可能logistic回归加上这

%个假设以后形成的分类器

  57: %的分界面对样本分类效果不是很好,这不能怪logistic回归,因为logistic回归本质不是用来分类的,而是求的概率。

  58: figure;

  59: plot(x(pos, 2), x(pos,3), ‘+‘)%把分界面呈现在样本点上面,所以还要把样本点画出来。

  60: hold on

  61: plot(x(neg, 2), x(neg, 3), ‘o‘)

  62: hold on

  63: plot(plot_x, plot_y)

  64: legend(‘Admitted‘, ‘Not admitted‘, ‘Decision Boundary‘)

  65: hold off

  66:  

当学习速率取不同的值时,迭代次数与cost function形成的不同的曲线 如图所示:

当学习速率为0.0014时候,我们看到图像开始振荡,说明学习速率过大了。

当我们将logistic回归应用到分类器中时,如果我们假设p(Y(x)|x)>0.5归为一类,p(Y(x)|x)<0.5归为另一类。那么分类器分界面如图:

当我们看到这个图时,我们是不是有种感觉:这个logistic回归比线性回归复杂,为什么结果得到的那么差?

先说一句,我们不要用这个分界面来评价logistic回归模型的好坏!!! 这个一会再说,我们先说这个分界面公式是怎么产生的。

分界面怎么画呢?问题也就是在x1,x2坐标图中找到那些将x1,x2带入1/(1+exp(-wx))后,使其值>0.5的(x1,x2)坐标形成的区域,因为我们知道1/(1+exp(-wx))>0.5意味着该区域的(x1,x2)表示的成绩允许上大学的概率>0.5,那么其他的区域就是不被允许上大学,那么1/(1+exp(-wx))=0.5解出来的一个关于x1,x2的方程就是那个分界面。我们解出来以后发现,这个方程是一个直线方程:w(2)x1+w(3)x2+w(1)=0  注意我们不能因为这个分界面是直线,就认为logistic回归是一个线性分类器,注意logistic回归不是一个分类器,他没有分类的功能,这个logistic回归是用来预测概率的,这里具有分类功能是因为我们硬性规定了一个分类标准:把>0.5的归为一类,<0.5的归于另一类。这是一个很强的假设,因为本来我们可能预测了一个样本所属某个类别的概率是0.6,这是一个不怎么高的概率,但是我们还是把它预测为这个类别,只因为它>0.5.所以最后可能logistic回归加上这个假设以后形成的分类器
的分界面对样本分类效果不是很好,这不能怪logistic回归,因为logistic回归本质不是用来分类的,而是求的概率。

牛顿法的程序之后再上传讲解。

时间: 2024-08-26 04:49:02

deep learning学习(四) 逻辑斯蒂(logistic)回归深入理解和matlab程序求参数的相关文章

deep learning (六)logistic(逻辑斯蒂)回归中L2范数的应用

zaish上一节讲了线性回归中L2范数的应用,这里继续logistic回归L2范数的应用. 先说一下问题:有一堆二维数据点,这些点的标记有的是1,有的是0.我们的任务就是制作一个分界面区分出来这些点.如图(标记是1的样本用+表示,0的用红点表示): 这其实是一个二分类问题,然后我们就想到了logistic回归模型.这是一个概率模型, 即预测在x已知时,标记为1的概率:那么标记为0的概率为:. 那么分别根据每个样本的标记y是1还是0分别带入到每个概率模型(每个样本只带入一个模型,而不是两个都带入)

Deep Learning(深度学习)之(四)Deep Learning学习资源

十一.参考文献和Deep Learning学习资源 先是机器学习领域大牛的微博:@余凯_西二旗民工:@老师木:@梁斌penny:@张栋_机器学习:@邓侃:@大数据皮东:@djvu9-- (1)Deep Learning http://deeplearning.net/ (2)Deep Learning Methods for Vision http://cs.nyu.edu/~fergus/tutorials/deep_learning_cvpr12/ (3)Neural Network for

混沌分形之逻辑斯蒂(Logistic)映射系统

前几天,有个同事看到我生成的一幅逻辑斯蒂分岔图像后,问我:“这是咪咪吗?”我回答:“淫者见淫.”好吧,这里将生成几种分岔映射图形,包括逻辑斯蒂映射系统,正弦映射系统和曼德勃罗映射系统.实际上这几种图形算不上分形,只不过它与我写的其他分形对象使用相同的基类,所以也将其列入混沌分形的范畴. 关于基类FractalEquation的定义及相关软件见:混沌与分形 (1)逻辑斯蒂映射系统 // 逻辑斯蒂映射系统 class LogisticMap : public FractalEquation { pu

用二项逻辑斯蒂回归解决二分类问题

逻辑斯蒂回归: 逻辑斯蒂回归是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的, 也可以是多分类的 基本原理 logistic 分布 折X是连续的随机变量,X服从logistic分布是指X具有下列分布函数和密度函数: 其中为位置参数,为形状参数.与图像如下,其中分布函数是以为中心对阵,越小曲线变化越快 二项logistic回归模型: 二项logistic回归模型如下: 其中是输入,输出,W称为权值向量,b称为偏置, 是w和x的内积 参数估计 ? 假设: ?

(转)Deep learning:四十二(Denoise Autoencoder简单理解)

前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Bengio在08年提出,见其文章Extracting and composing robust features with denoising autoencoders.使用dAE时,可以用被破坏的输入数据重构出原始的数据(指没被破坏的数据),所以它训练出来的特征会更鲁棒.本篇博文主要是根据Benig

梯度下降法解逻辑斯蒂回归

梯度下降法解逻辑斯蒂回归 本文是Andrew Ng在Coursera的机器学习课程的笔记. Logistic回归属于分类模型.回顾线性回归,输出的是连续的实数,而Logistic回归输出的是[0,1]区间的概率值,通过概率值来判断因变量应该是1还是0.因此,虽然名字中带着"回归"(输出范围常为连续实数),但Logistic回归属于分类模型(输出范围为一组离散值构成的集合). 整体步骤 假如我们的自变量是"数学课和英语课的成绩",x={x1,x2},因变量是"

Deep learning:四十三(用Hessian Free方法训练Deep Network)

Deep learning:四十三(用Hessian Free方法训练Deep Network) 2016-03-13 15:14:01 mydear_11000 阅读数 912更多 分类专栏: 机器学习 深度学习 tornadomeet 目前,深度网络(Deep Nets)权值训练的主流方法还是梯度下降法(结合BP算法),当然在此之前可以用无监督的方法(比如说RBM,Autoencoder)来预训练参数的权值,而梯度下降法应用在深度网络中的一个缺点是权值的迭代变化值会很小,很容易收敛到的局部最

逻辑斯蒂回归

1,逻辑斯蒂回归问题有一组病人的数据,我们需要预测他们在一段时间后患上心脏病的“可能性”,就是我们要考虑的问题.通过二值分类,我们仅仅能够预测病人是否会患上心脏病,不同于此的是,现在我们还关心患病的可能性,即 f(x) = P(+1|x),取值范围是区间 [0,1]. 然而,我们能够获取的训练数据却与二值分类完全一样,x 是病人的基本属性,y 是+1(患心脏病)或 -1(没有患心脏病).输入数据并没有告诉我们有关“概率” 的信息. 在二值分类中,我们通过w*x 得到一个"score"

【deep learning学习笔记】Recommending music on Spotify with deep learning

主要内容: Spotify是个类似酷我音乐的音乐网站,做个性化音乐推荐和音乐消费.作者利用deep learning结合协同过滤来做音乐推荐. 具体内容: 1. 协同过滤 基本原理:某两个用户听的歌曲都差不多,说明这两个用户听歌的兴趣.品味类似:某两个歌曲,被同一群人听,说明这两个歌曲风格类似. 缺点: (1)没有利用歌曲本身的特征(信息) (2)无法对"层级"的item进行处理,对于歌曲来说,这种层级关系体现在:专辑-主打歌-副歌,上面,这几种因素并不是同等重要的 (3)冷启动问题: