加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Lasso – 选择scikit坐标下降的初始点

发布时间:2020-12-20 13:45:04 所属栏目:Python 来源:网络整理
导读:我的问题在于scikit中的Lasso非常普遍: 我正在使用Lasso进行回归,以便为特征x_i拟合一定数量的点y_i.点数n严格地低于特征的尺寸p. 因此,存在针对给定惩罚α系数的若干解决方案. scikit给出的解决方案取决于起点(它是d个零系数的向量). 除了修改库之外,您是
我的问题在于scikit中的Lasso非常普遍:

我正在使用Lasso进行回归,以便为特征x_i拟合一定数量的点y_i.点数n严格地低于特征的尺寸p.

因此,存在针对给定惩罚α系数的若干解决方案.

scikit给出的解决方案取决于起点(它是d个零系数的向量).

除了修改库之外,您是否知道另一个库可以自由选择起点?

或者也许有一个明显的选择我错过scikit选择起点?

解决方法

可以在scikit-learn中设置Lasso的初始点.

但是可能存在一组无限的同样好的解决方案,以发现您需要一些先进的二次编程方法

要设置初始点,只需使用warm_start = True初始化模型并设置其coef_属性.

像这样:

from sklearn.linear_model import Lasso
model = Lasso(warm_start=True)
model.coef_ = manual_initial_coef
model.fit(X,y)

这是可能的,因为代码inside scikit-learn Lasso implementation包含

if not self.warm_start or not hasattr(self,"coef_"):
        coef_ = np.zeros((n_targets,n_features),dtype=X.dtype,order='F')
    else:
        coef_ = self.coef_
        if coef_.ndim == 1:
            coef_ = coef_[np.newaxis,:]

但是,在我看来,默认初始系数(零)对于大多数问题是最好的.实际上,当你使用套索时,你通常会认为它的最终系数大部分为零 – 为什么不从全零开始呢?

在退化设计矩阵的情况下,Lasso解决方案确实是非独特的.但是不能有多个不相交的局部最优(如在神经网络中),因为成本函数仍然(非严格地)凸.相反,可能存在一组连续(也是凸起)的同样好的解决方案.这种模糊性的最简单的情况是当x由两个相同的列组成时:系数(beta,0),(0,beta)$,并且它们的所有凸组合都做得很好.

如果是这种情况,从多个随机点简单重新启动将无法为您提供整套解决方案.相反,您需要使用special techniques以某种方式定义其角(极端)点,或以某种方式定义此集合中的“最佳”解决方案.定义唯一“最佳”解决方案的一种方法是LARS algorithm(sklearn.linear_model.Lars),它为不确定情况下的所有协变量赋予“平等权利”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读