因为带l1正则化项的损失函数是不可微的,所以这里我们单独来讨论一下l1正则化的求解方法,这里我们可以直接turn to sklearn for help.

solver : str, {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}, optional (default=’liblinear’).
Algorithm to use in the optimization problem.For small datasets, ‘liblinear’ is a good choice, whereas ‘sag’ and ‘saga’ are faster for large ones.
For multiclass problems, only ‘newton-cg’, ‘sag’, ‘saga’ and ‘lbfgs’ handle multinomial loss; ‘liblinear’
is limited to one-versus-rest schemes.
‘newton-cg’, ‘lbfgs’, ‘sag’ and ‘saga’ handle L2 or no penalty
‘liblinear’ and ‘saga’ also handle L1 penalty
‘saga’ also supports ‘elasticnet’ penalty
‘liblinear’ does not handle no penaltyliblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
saga:线性收敛的随机优化算法的的变种。

可以看到,sklearn中支持l1正则化的求解算法有liblinear和saga,由于L1范数用的是绝对值之和,导致损失函数有不可导的点。

但是实际上如果要使用梯度下降法或者牛顿法之类的其实也是可以的,只不过在部分点上导数木有意义不需要考虑到梯度更新的过程中。

sklearn.linear_model.SGDClassifier - scikit-learn 0.21.3 documentation​scikit-learn.org

首先回顾一下高中知识:相关解答一:

如何证明用一个函数不可导

如果不连续,则不可导。
因为初等函数在定义域区间通常都是连续可导的,所以要证明不可导的通常都是一些分段函数分界点,转折点等。比如y=|x|中x=0这个转折点。
只须判断其左右导数是否相等。只有它们都存在且相等,在该点才可导。

函数可导不可导怎么判断

函数的条件是在定义域内,必须是连续的.可导函数都是连续的,但是连续函数不一定是可导函数.
例如,y=|x|,在x=0上不可导.即使这个函数是连续的,但是lim(x趋向0+)y'=1, lim(x趋向0-)y'=-1,两个值不相等,所以不是可导函数。也就是说在每一个点上导数的左右极限都相等的函数是可导函数,反之不是

如何让判断一个函数在某个点的可导性

首先判断函数在这个点x0是否有定义,即f(x0)是否存在;
其次判断f(x0)是否连续,即f(x0-), f(x0+), f(x0)三者是否相等;
再次判断函数在x0的左右导数是否存在且相等,即f‘(x0-)=f'(x0+)
只有以上都满足了,则函数在x0处才可导。

首先看一下l1正则化的损失函数:

则关于参数theta求导可得:

关于绝对值的导数可以用sgn(x)函数来表示,具体可见:

https://baike.baidu.com/item/sign%E5%87%BD%E6%95%B0/1343199?fr=aladdin​baike.baidu.com

其中对于二元逻辑回归,h表示sigmoid(W*X)

我们先实现一下常规的梯度下降求解lr:

import 

可以看到,相对于原始的逻辑回归不带正则的推导出来的梯度更新式,l2正则化每次都是

将原来的weights按照一定比例缩小为原来的一部分,并且缩小的量也会随着weights变得越小而改变的越小,所以l2只能将系数压缩到趋近于0的小数字但是无法为0。

而l1正则化每次都是:

减去某个数字,和weights的大小基本无关,只要weights>0就是1,<0就是-1,所以明显这种方式能够导致部分weights变成0

有空再写坐标轴下降法


坐标下降法和梯度下降法的损失函数是一样的,不同的是坐标下降法是每次固定n-1个参数,去单独优化剩下的一个参数

下面为具体的更新过程。

(1)选取初始参数

这里的theta就是逻辑回归的权重系数

(2)针对当前得到的参数进行迭代,假设已经求出第k-1轮的参数,现在由求,其中,则:

(3)通过以上步骤即可以得到每轮的迭代结果,如果相对于的变化很小,则停止迭代,否则,重复步骤(2).

通过以上迭代过程可以看出

1. 坐标轴下降法进行参数更新时,每次总是固定另外m-1个值,求另外一个的局部最优值,这样也避免了Lasso回归的损失函数不可导的问题。

2. 坐标轴下降法每轮迭代都需要O(mn)的计算。(和梯度下降算法相同)

正则化极限学习机_手写逻辑回归(带l1正则)相关推荐

  1. 毕设(一):正则化极限学习机(RELM)、在线学习的极限学习机(OS-ELM)、带遗忘机制的在线学习极限学习机(FOS-ELM)

    前言 终于要毕业了,毕业设计也做完了,我的毕设是<极限学习机和强化学习在单一资产交易中的应用>,本质上用以极限学习机为值函数逼近器的一类强化学习算法去对一个资产进行交易.既然毕设也做完了, ...

  2. numpy手撕逻辑回归分类MNIST公式+代码

    简介 逻辑回归虽然顶着一个回归的名称,但是实际上做的是分类的事情.回归的一般形式可以表示为:f(x)=wx+bf(x)=wx+bf(x)=wx+b然而,分类任务的最终结果是一个确定的标签值,逻辑回归的 ...

  3. react 日期怎么格式化_手写React的Fiber架构,深入理解其原理

    熟悉React的朋友都知道,React支持jsx语法,我们可以直接将HTML代码写到JS中间,然后渲染到页面上,我们写的HTML如果有更新的话,React还有虚拟DOM的对比,只更新变化的部分,而不重 ...

  4. redis setnx 分布式锁_手写Redis分布式锁

    分布式锁使用场景 现在的系统都是集群部署,每个服务都不是单节点的了.比如库存服务,可能部署到3台机器上分别命名为节点1,节点2,节点3.库存服务需要扣减库存,扣减库存肯定需要锁吧,如果使用Lock或者 ...

  5. c++socket多个客户端通过不同端口与一个服务端通信_手写RPC,深入底层理解整个RPC通信...

    一.前言 RPC,远程过程调用,调用远程方法像调用本地方法一样.RPC交互分为客户端和服务端,客户端调用服务端方法,服务端接收数据并打印到控制台,并response响应给客户端. RPC和HTTP的联 ...

  6. 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归

    1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...

  7. mnist手写数字识别_手写数字识别

    案例: 基于mnist数据集,建立mlp模型,实现0-9数字的十分类任务: 1.实现mnist数据载入,可视化图形数字 2.完成数据预处理:图像数据维度转换与归一化.输出结果格式转换 3.计算模型在预 ...

  8. 5 拦截器拦截请求路由_手写简易版axios拦截器,实现微信小程序wx.request的封装与拦截...

    前言: axios是一个功能强大的网络请求库,其中拦截器又是axios的精髓.在小程序的开发或者需要手动实现ajax的时候,没有实现对请求的拦截,开发的时候非常不方便,因此手写一个简易版的axios拦 ...

  9. r语言 C4.5 剪枝是用什么算法_决策树,逻辑回归,PCA算法面经

    目录 决策树 简述决策树原理? 为什么要对决策树进行减枝?如何进行减枝? 简述决策树的生成策略 PCA 简述主成分分析PCA工作原理,以及PCA的优缺点? PCA中有第一主成分.第二主成分,它们分别是 ...

最新文章

  1. 在Ubuntu 14.04 64bit下玩转Qvod快播Linux山寨版本
  2. Task01:青少年软件编程(Scratch)等级考试模拟卷(一级)
  3. 【转摘】Office三剑客之间的格式互换
  4. 简单的python爬虫实例
  5. AM335x kernel4.4.12 LCD 时钟翻转设置记录
  6. java oca_OCA第1部分中的Java难题
  7. js的深浅拷贝( 赋值后原值被覆盖的问题 )
  8. 阿里数据库内核月报:2015年06月
  9. (13)FPGA面试技能提升篇(Shell脚本)
  10. hadoop框架分析
  11. c++矩阵运算库Eigen简介
  12. 工人退休工资偏低,为什么?
  13. 计算机网络中的所谓资源是指硬件软件资源,计算机网络试题..doc
  14. 论文解读:《Deep-4mcw2v: 基于序列的预测器用于识别大肠桿菌中的 N4- 甲基胞嘧啶(4mC)位点》
  15. 微信摇一摇linux,关于微信摇一摇iBeacon配置流程
  16. Ubuntu环境下安装QT5
  17. 手机号86注册不了谷歌?无法验证手机号如何100%解决!
  18. 23web app实现上下左右滑动
  19. android bitmap nv21,Nv21转Bitmap(高效率转化)
  20. 【转载】自然界通用的“质子缓存”模型

热门文章

  1. 每次hexo d部署后都要在github仓库上重新保存域名
  2. 如何看待Spring下单例模式与线程安全的矛盾
  3. 31、如何安装第三方模块?以及用过哪些第三方模块?
  4. SSE图像算法优化系列八:自然饱和度(Vibrance)算法的模拟实现及其SSE优化(附源码,可作为SSE图像入门,Vibrance算法也可用于简单的肤色调整)。...
  5. Mysql 水平拆分和垂直拆分
  6. servlet config 初始化参数
  7. Array,Vector,List,Deque的区别与联系【转+改】
  8. 如何在 SQL 2008 安裝 Performance Dashboard Reports
  9. 输入法项目-用delphi生成GBK 中文编码 表(4~5) GBK/4~5: 0xAA40~0xFEA0(部分) 扩充汉字 包括繁体 0xA840~0xA995(部分) 扩充非汉字...
  10. python 30分钟_Python 30分钟入门指南