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

zaish上一节讲了线性回归中L2范数的应用,这里继续logistic回归L2范数的应用。

先说一下问题:有一堆二维数据点,这些点的标记有的是1,有的是0.我们的任务就是制作一个分界面区分出来这些点。如图(标记是1的样本用+表示,0的用红点表示):

这其实是一个二分类问题,然后我们就想到了logistic回归模型。这是一个概率模型,

即预测在x已知时,标记为1的概率:那么标记为0的概率为:

那么分别根据每个样本的标记y是1还是0分别带入到每个概率模型(每个样本只带入一个模型,而不是两个都带入),然后就得出了对数似然估计,也就是

cost function,这也就是之前我们做的。

现在我要说点不同的东西,先说一下之前理解的线性回归中的,我之前以为就是样本的所有维度变量的线性叠加。其实这里的线性回归不光是这样,我理解的太狭隘了。这里的x,包括前面的x指的是样本特征的向量!不是很明白么,继续解释一下,一个样本是[x1,x2],那么这个样本的特征可以是x=   [x1,x2],但是这个样本的特征也可以不光是这些,比如这个样本的特征还可以是x=[x1,x1平方,x2,x2平方,x1x2].懂了吧?特征是你自己从观察值中提取出来的,你想是什么就是什么,而不只是观察值本身。再比如,有一幅图像,那么这幅图像的特征不光可以是像素值,还可以用很多方法来得到你想要的图像的特征。而这里说的线性回归应该指的是特征的线性回归模型。所以上一节确实是线性回归模型。所以从观察值中如何找特征,找哪些特征也是一个很重要的问题。

现在我们的样本观察值有两维,即,并且我们根据观察值,取的特征为:

这是一个29维的特征向量,我们先根据每一个样本的观察值得到每一个样本29维的特征向量。这个程序,程序下载入口这个网站已经给出了:

   1: function xFeature= map_feature(u, v)
   2: %u,v 向量每个元素分别是每个样本的第一维,第二维的观察值

   3: degree= 6;

   4:     xFeature= ones(size(u(:,1)));

   5:     for i = 1:degree

   6:         for j = 0:i

   7:            xFeature(:, end+1) = (u.^(i-j)).*(v.^j);

   8:            %xFeature 矩阵的每一行是每一个样本的特征向量

   9:         end

  10:     end

加入L2正则项的cost function是:

这里θ是从θ0开始的,一直到θ28.θ0就是θX中常数项的那个参数。所以这个公式表明θ0是不用加上去的。即常数项的那个参数不参与cost function的规则相。

公式中的x(i)就是前面得到的每一个样本的28维特征向量

现在我们要对这个cost function 最小化来得到模型的参数。我们使用牛顿法进行迭代:

我们知道(之前的一节中)没有正则项时候的cost function的一次导为:

二次导数为:

带了L2正则项的cost function 的一次导为:

也就是:,θ’是θ这个模型参数向量(这里第一个元素师θ0,也就是θX常数项的参数)的第一个元素θ0=0的向量。

二次导为:

matlab代码即:

   2: %之后就不用再增加一列了。后面的theta参数也不用n+1了。
   3: [m, n] = size(x);

   4: % Initialize fitting parameters

   5: theta = zeros(n, 1);%参数θ向量是一个列向量。

   6: % Define the sigmoid function

   7: g = inline(‘1.0 ./ (1.0 + exp(-z))‘); 

   8: % setup for Newton‘s method

   9: MAX_ITR = 15;%牛顿迭代法的次数

  10: J = zeros(MAX_ITR, 1);%初始化15次迭代的cost function 值,J是为了之后画图

  11: % Lambda 是L2正则项的参数

  12: lambda = 1;%lambda=0,1,10,修改这个地方,运行3次可以得到3种结果。

  13: % Newton‘s Method

  14: for i = 1:MAX_ITR

  15:     z = x * theta;

  16:     h = g(z);%z,h都是m*1的列向量,m是样本的个数

  17:     % Calculate J (for testing convergence)
   1: x = map_feature(x(:,1), x(:,2));%得到的x第一列都是1,经过这个函数后已经增加了,

  18:     J(i) =(1/m)*sum(-y.*log(h) - (1-y).*log(1-h))+ ...

  19:     (lambda/(2*m))*norm(theta([2:end]))^2;

  20:   %norm(theta([2:end]))就是欧氏距离,所以还要平方。要知道是2:end,不是1:end

  21:   %前面说了

  22:     

  23:     % Calculate gradient and hessian.

  24:     G = (lambda/m).*theta; G(1) = 0; 

  25:     % extra term for gradient 

  26:     L = (lambda/m).*eye(n); L(1) = 0;

  27:     % extra term for Hessian  eye(n)是n维单位矩阵。

  28:     grad = ((1/m).*x‘ * (h-y)) + G;

  29:     H = ((1/m).*x‘ * diag(h) * diag(1-h) * x) + L;%除了G,L其他的公式matlab

  30:     %的表达形式都和以前一样。

  31:     

  32:     % Here is the actual update

  33:     theta = theta - H\grad;

  34:   

  35: end

当我们得到logistic回归模型的参数后,我们知道这个模型得到的是概率,我们如果想用这个模型进行分类,我们需要有一个分类假设,这里我们假设如果

h(x(i))>0.5,那么这个样本X(i)就属于label=1那一类,如果<0.5,那么这个样本x(i)就属于label=0那一类。于是我们推算出来:

这个就是分界面。注意这里的x是那个29维的向量。因为我们要在那个输入的观察向量[u,v]那个面上画出分界面,所以我们要把这里的x里面的元素各代表多少的u和v还原回去,那么这个分界面就是一个曲面了(因为有u,v都有高次方)。那么具体怎么画哪,我们在u,v轴上画出一个区域的数据格,把这个区域里面所有的[u,v]通过map_function 得到每一个29维的x向量, 然后通过,得到这个区域所有对应的z,然后通过在这些z中画出z=0的等高线,就得到了的这个分界面。具体的matlab程序为:

   1: u = linspace(-1, 1.5, 200);
   2: v = linspace(-1, 1.5, 200);

   3: z = zeros(length(u), length(v));

   4:  

   5: % Evaluate z = theta*x over the grid

   6: for i = 1:length(u)

   7:     for j = 1:length(v)

   8:         z(i,j) = map_feature(u(i), v(j))*theta;

   9:     end

  10: end

  11: z = z‘; % important to transpose z before calling contour

  12:  

  13: % Plot z = 0

  14: contour(u, v, z, [0, 0], ‘LineWidth‘, 2)

    这里有个疑惑的地方就是第11行为什么要对z转置,这里说一下:假设区域如图所示:

    看上面程序的第6-8行,我们知道i=1,v=2的时候,那么z(1,2)就是图中的红点对应的z值,那么循环完之后就是有一个z矩阵,

    那么接下来我们用contour这个画等高线,后面的输入是(u,v,z,[0,0]),这里的意思是根据u,v向量给出的坐标,然后和对应的z得到z的

    曲面,然后后面的[0,0]意思是画出z=0和z=0之间的等高线,也就是画出z=0的等高线。这里有一个地方要注意的是u,v向量给出的坐标,然后和z

    对应的方式是:比如u的第一个元素和v的第二个元素,对应的是z矩阵的第二行第一列z(2,1),也就是u对应的是矩阵z第几列,v对应的是矩阵z的第几行。然而,我们根据之前循环得到的矩阵知道,那里的z(2,1)是当i=2,v=1得到的,也就是u=2(u的第二个元素),v=1(v的第一个元素),所以我们草药把循环得到的z转置才可以使用contour函数。

    实验结果:

    当L2正则项参数为0时,cost function的 收敛情况如图:

    此时分界面对样本分界的情况如图:

    可以看出,分界面比较复杂,虽然对样本分界的效果做到很精细,但我们做出的分界面是为了对未标注的样本分类,过于复杂的分界面容易产生过拟合现象。

    当L2正则项参数为1时,cost function的 收敛情况如图:

    可以看出,λ=1时收敛更快,说明正则项的系数增大会使模型变得简单,从分界面对样本分界的情况更可以看出来,如图:

    分界面更圆滑,虽然分界面不是很精细了,也有些误分类,但是模型的简单化可以防止过拟合现象,可能对未训练样本分类更好。

    再看下λ=10时的情况:

    这时候你可能会想我这时候取的特征中最高是观察值的6次方,我们知道6次方最后得到的分界面肯定是很复杂的,如果我们把特征变的简单一点,比如观察值最高是3次方,这时候最后得到的分界面肯定比之前简单(更极端的是特征就是观察值,也就是说特征是观察值的一次方,前面已经画过了,是一条直线),我们验证一下:

    当特征最高是观察值的3次方(λ=0):

    收敛情况和分界面对样本分界的情况分别是:

    我们看到模型确实更简单了,收敛更快了(相比上面的六次方λ=0的情况)我个人感觉这个相比六次方那个特征假设模型更好,可以比较这个分界曲面的方向,并且比较圆滑,比较美,也比较符合样本的走向。我认为更具有普适性。对未知样本分类效果更好。

    时间: 2024-10-29 05:21:14

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

    第六章 逻辑斯蒂回归与最大熵模型

    书中重要定义及一些理解 先通过介绍逻辑史蒂的分布来引出logist模型 而通过极大似然法来推导模型的参数估计问题 通过对模型参数的似然函数通过求导来得到递归方程 通过公式可以看出logist是对前面的感知机的升级版,感知机的判断方式过于简单.而其梯度下降的时候也将sign的去掉了,否则无法微分. 后通过方程来写出公式,代码如下 import numpy as np from read_data import get_2_kind_data def logistic_Regression(tra_

    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各维度叠加和(这里

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

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

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

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

    逻辑斯蒂回归

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

    逻辑斯蒂回归(logisic regression)和SVM的异同

    逻辑斯蒂回归主要用于二分类,推广到多分类的话是类似于softmax分类.求 上述问题可以通过最大化似然函数求解. 上述问题可以采用最小化logloss进行求解. 一般地,我们还需要给目标函数加上正则项,参数w加上l1或者l2范数. LR适合大规模数据,数据量太小的话可能会欠拟合(考虑到数据通常比较稀疏).另外,我们可以将连续型属性转化成离散型属性,这样可以提升模型的鲁棒性,防止模型过拟合. LR和SVM的异同点 相同点 1.他们都是分类算法,是监督学习算法. 2.如果不考虑核函数,LR和SVM都

    逻辑斯蒂回归模型

    http://blog.csdn.net/hechenghai/article/details/46817031 主要参照统计学习方法.机器学习实战来学习.下文作为参考. 第一节中说了,logistic 回归和线性回归的区别是:线性回归是根据样本X各个维度的Xi的线性叠加(线性叠加的权重系数wi就是模型的参数)来得到预测值的Y,然后最小化所有的样本预测值Y与真实值y‘的误差来求得模型参数.我们看到这里的模型的值Y是样本X各个维度的Xi的线性叠加,是线性的. Y=WX (假设W>0),Y的大小是随

    逻辑斯蒂回归(Logistic Regression)

    逻辑回归名字比较古怪,看上去是回归,却是一个简单的二分类模型. 逻辑回归的目标函数是如下形式: 其中x是features,θ是feature的权重,σ是sigmoid函数.将θ0视为θ0*x0(x0取值为常量1),那么 这里我们取阈值为0.5,那么二分类的判别公式为: 下面说一下参数θ的求解: 为啥子这样去损失函数呢? 当y=1的时候,显然hθ(x)越接近1我们的预测越靠谱:y=0时同理.所以应该在y=1时,使损失韩式-log(hθ(x))越小越好,y=0时,同样使损失函数-log(1-hθ(x

    《统计学习方法》第六章,逻辑斯蒂回归

    ? 使用逻辑地模型来进行分类,可以算出每个测试样本分属于每个类别的概率 ● 二分类代码 1 import numpy as np 2 import matplotlib.pyplot as plt 3 from mpl_toolkits.mplot3d import Axes3D 4 from mpl_toolkits.mplot3d.art3d import Poly3DCollection 5 from matplotlib.patches import Rectangle 6 7 data