笔记。

岭回归, 计算回归系数时使( RSS(w)+λ||w||2) 最小

  岭回归的结果会是所有的特征的weight都较小,但大多数又不完全为零。

  而实际情况中,有的特征的确与输出值相关程度很高,weight本就应该取一个较大的值,

而有的特征与输出结果几乎毫无关系,取一个很小的值不如直接取零。

  岭回归的结果,一方面使“非常有用的”特征权值取不到一个较大的值,"有用"的特征无法很好表达,

另一方面又不能有效的筛掉“无用”的特征,很累赘。在特征很少时,这个缺陷可能没什么影响,但当

特征很多时,岭回归的缺陷较为明显。后续计算复杂度显著提高(很多非零的weight实际上很小)。

  一个解决方法是在合理的范围里提高结果 (weights)的稀疏度(sparsity),尽量只留下“有用”的

特征的权值,其他相关度低的特征权值直接取零。这样后续计算只需要关注非零的权值,复杂度大大降低。

如何筛选出部分”有用“的特征?

一个方法是使用贪婪算法。

过程:

  1. 特征集合F初始为空集;

  2.用特征集合F拟合模型,得到weights, 计算training error;

  3.选择下一个最佳特征 f:

   使用{F+f}作为特征集合可以使training error达到新低;

  4. F <-- F+ f

  5.递归

   

  

Lasso 回归: minimize (RSS(w)+λ||w||1)

||w||1为L1 范数,系数绝对值之和 |w|

|w|导数?

直接解方程 或 梯度下降 方法都不适用。

可以用subgradient 方法。

Coordinate descent:

用于解决一类最小值问题。适用于 直接求全局最小值很困难, 但单个坐标求最小值很容易 的函数。

求解过程:

    

  1. 初始化

  2. 循环,单个坐标一个个更新到最小值

  3. 计算每一步的步长(步长应越来越小),当最大步长 < ε 停止,否则循环

    

      

def lasso_coordinate_descent_step(i, feature_matrix, output, weights, l1_penalty):
# compute prediction
prediction = predict_output(feature_matrix, weights)
# compute ro[i] = SUM[ [feature_i]*(output - prediction + weight[i]*[feature_i]) ]
ro_i = np.dot(feature_matrix[:,i],(output - prediction + weights[i]*feature_matrix[:,i])) if i == 0: # intercept -- do not regularize
new_weight_i = ro_i
elif ro_i < -l1_penalty/2.:
weight_i = ro_i + l1_penalty/2.
elif ro_i > l1_penalty/2.:
new_weight_i = ro_i - l1_penalty/2.
else:
new_weight_i = 0. return new_weight_i def lasso_cyclical_coordinate_descent(feature_matrix, output, weights, l1_penalty, tolerance): converged = False while converged == False:
coordinate = []
for i in xrange(len(weights)):
old_weights_i = weights[i] # remember old value of weight[i], as it will be overwritten
# the following line uses new values for weight[0], weight[1], ..., weight[i-1]
# and old values for weight[i], ..., weight[d-1]
weights[i] = lasso_coordinate_descent_step(i, feature_matrix, output, weights, l1_penalty) # use old_weights_i to compute change in coordinate
coordinate.append(abs(weights[i] - old_weights_i))
if max(coordinate) < tolerance:
converged = True return weights

  

  

week 5: ;Lasso regression & coordinate descent的更多相关文章

  1. 坐标下降法(coordinate descent method)求解LASSO的推导

    坐标下降法(coordinate descent method)求解LASSO推导 LASSO在尖点是singular的,因此传统的梯度下降法.牛顿法等无法使用.常用的求解算法有最小角回归法.coor ...

  2. [Scikit-learn] 1.1 Generalized Linear Models - Lasso Regression

    Ref: http://blog.csdn.net/daunxx/article/details/51596877 Ref: https://www.youtube.com/watch?v=ipb2M ...

  3. V-rep学习笔记:机器人逆运动学数值解法(Cyclic Coordinate Descent Method)

    When performing inverse kinematics (IK) on a complicated bone chain, it can become too complex for a ...

  4. 吴恩达深度学习:2.9逻辑回归梯度下降法(Logistic Regression Gradient descent)

    1.回顾logistic回归,下式中a是逻辑回归的输出,y是样本的真值标签值 . (1)现在写出该样本的偏导数流程图.假设这个样本只有两个特征x1和x2, 为了计算z,我们需要输入参数w1.w2和b还 ...

  5. 坐标下降(Coordinate descent)

    坐标下降法属于一种非梯度优化的方法,它在每步迭代中沿一个坐标的方向进行线性搜索(线性搜索是不需要求导数的),通过循环使用不同的坐标方法来达到目标函数的局部极小值.

  6. Python机器学习——线性模型

    http://www.dataguru.cn/portal.php?mod=view&aid=3514 摘要 : 最近断断续续地在接触一些python的东西.按照我的习惯,首先从应用层面搞起, ...

  7. Python大战机器学习——基础知识+前两章内容

    一  矩阵求导 复杂矩阵问题求导方法:可以从小到大,从scalar到vector再到matrix. x is a column vector, A is a matrix d(A∗x)/dx=A d( ...

  8. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  9. [Example of Sklearn] - Example

    reference : http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据 ...

随机推荐

  1. Java练习:tips.Print

    在学习Java时和<编程导论(Java)>中,大量使用了重载的System.out.println()等类似的输出语句.特别是书籍中,一行语句中包括System.out.println会显 ...

  2. IOS研究之多个UITextField的键盘处理

    在IOS开发中使用UITextField时常须要考虑的问题就是键盘的处理. 有时候,弹出的键盘会将UITextField区域覆盖,影响用户输入.这个时候就要将视图上移.这个时候我们须要考虑两点: 1, ...

  3. 【Docker安全】关于Docker使用root与非root用户的场景中的容器与host中的执行用户的研究

    参考: http://blog.csdn.net/yygydjkthh/article/details/47694929

  4. vue2计算属性computed

    详见vue2.0 API<计算属性> 需求: 模板内的表达式是非常便利的,但是它们实际上只用于简单的运算.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id=&qu ...

  5. ChannelHandlerContext writeAndFlush(firstMessage)

  6. 在线安装eclipse中html/jsp/xml editor插件 eclipseeditor

    1.打开eclipse中的help————>Install New Software 2.点击Add按钮,然后弹出一个框,第一个文本框可以随便写,第二个一定要写: http://download ...

  7. 在redhat下使用x11vnc进行桌面共享

    1.在redhat上安装x11vnc时.你须要注意下面几个方面: (1)下载x11vnc的源代码包: 网址例如以下所看到的: http://sourceforge.net/projects/libvn ...

  8. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面HMI自锁按钮和自复位按钮如何理解(Toggle variable Tap variable)

    我分别创建两个按钮,自锁和自复位,绑定到主程序的两个布尔值上去   自锁按钮是指点击一下为TRUE,再点击一下为FALSE,自复位按钮是指按下的时候为TRUE,松开的时候为FALSE(也可以勾选Tap ...

  9. lodash 类型判断

    1.isArray _.isArray(value) 检查 value 是否是 Array 类对象. 2.isElement _.isElement(value) 检查 value 是否是可能是 DO ...

  10. Android重写ViewPager改动滑动灵敏度

        使用ViewPager作为一个页面进行切换.里面能够存放非常多View,但有时在操作View时不小心滑动一下就有可能跳到下一页,这并非我们想要的,这里就须要重写ViewPager改动它的滑动条 ...