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的情况)我个人感觉这个相比六次方那个特征假设模型更好,可以比较这个分界曲面的方向,并且比较圆滑,比较美,也比较符合样本的走向。我认为更具有普适性。对未知样本分类效果更好。

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

  1. 机器学习之LinearRegression与Logistic Regression逻辑斯蒂回归(三)

    一 评价尺度 sklearn包含四种评价尺度 1 均方差(mean-squared-error) 2 平均绝对值误差(mean_absolute_error) 3 可释方差得分(explained_v ...

  2. 【转】机器学习笔记之(3)——Logistic回归(逻辑斯蒂回归)

    原文链接:https://blog.csdn.net/gwplovekimi/article/details/80288964 本博文为逻辑斯特回归的学习笔记.由于仅仅是学习笔记,水平有限,还望广大读 ...

  3. 【分类器】感知机+线性回归+逻辑斯蒂回归+softmax回归

    一.感知机     详细参考:https://blog.csdn.net/wodeai1235/article/details/54755735 1.模型和图像: 2.数学定义推导和优化: 3.流程 ...

  4. spark机器学习从0到1逻辑斯蒂回归之(四)

      逻辑斯蒂回归 一.概念 逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的,也可以是多分类的.logis ...

  5. python机器学习实现逻辑斯蒂回归

    逻辑斯蒂回归 关注公众号"轻松学编程"了解更多. [关键词]Logistics函数,最大似然估计,梯度下降法 1.Logistics回归的原理 利用Logistics回归进行分类的 ...

  6. [置顶] 局部加权回归、最小二乘的概率解释、逻辑斯蒂回归、感知器算法——斯坦福ML公开课笔记3

    转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9113681 最近在看Ng的机器学习公开课,Ng的讲法循循善诱,感觉提高了不少 ...

  7. 【项目实战】pytorch实现逻辑斯蒂回归

    视频指导:https://www.bilibili.com/video/BV1Y7411d7Ys?p=6 一些数据集 在pytorch框架下,里面面有配套的数据集,pytorch里面有一个torchv ...

  8. 逻辑斯蒂回归VS决策树VS随机森林

    LR 与SVM 不同 1.logistic regression适合需要得到一个分类概率的场景,SVM则没有分类概率 2.LR其实同样可以使用kernel,但是LR没有support vector在计 ...

  9. 逻辑斯蒂回归(Logistic Regression)

    逻辑回归名字比较古怪,看上去是回归,却是一个简单的二分类模型. 逻辑回归的模型是如下形式: 其中x是features,θ是feature的权重,σ是sigmoid函数.将θ0视为θ0*x0(x0取值为 ...

随机推荐

  1. android自定义控件(二)Canvas

    一.重要方法 1.translate 2.scale 3.rotate 二.注意 1.明确顺序 canvas.rotate(45); canvas.drawRect(new Rect(50, 50, ...

  2. Oracle学习笔记—connect、resource和dba三种权限(转载)

    转载自: connect.resource和dba三种标准角色: 授权语句: grant connect ,resource,dba to user with admin option; (注意:其中 ...

  3. ABAP 多行消息分别显示弹窗

    *&---------------------------------------------------------------------* *& Report YT_POPUP_ ...

  4. vlc做转发的命令

    from:http://blog.csdn.net/linyuejiang/article/details/7498482 将一个udp的多播流转发复制到http流中去 vlc udp://@239. ...

  5. 使用jQuery方法做任务左右栏移动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. pyhton3 logging模块

    1.简单的将日志打印到屏幕   import logging logging.debug('This is debug message')logging.info('This is info mess ...

  7. 算法寒假实习面试经过之 十一贝(offer) 联想研究院(电话一面 被拒)

    联想研究院 1面 自我介绍 聊比赛,讲了讲jdd的. 感觉都快要背过了... 之前重复的问题就不说了,说一下印象比较深的 adaboost 与gbdt的区别 随机森林,如果有t个特征,n个树,每个树深 ...

  8. Python学习进程(14)异常处理

        本节介绍Python进行异常处理的方式,异常处理机制可以帮助我们调试python程序.     (1)异常的简介:     异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行 ...

  9. Java zip 压缩 文件夹删除,移动,重命名,复制

    FileUtil.java import java.io.*; import java.util.List; import java.util.zip.ZipEntry; import java.ut ...

  10. 支持鼠标拖拽滑动的jQuery焦点图

    在线演示 本地下载