拉索-选择scikit坐标下降的初始点



我的问题在scikit:中对Lasso很一般

我正在用Lasso进行回归,以将一定数量的点y_i拟合到特征x_i。点的数量n严格地低于特征的维度p

因此,对于给定的惩罚α系数,存在几种解决方案。

scikit给出的解取决于起始点(它是d零系数的向量)。

除了修改库,你知道还有哪个库可以自由选择起点吗?

或者我在scikit中错过了一个选择起点的明显选项?

可以在scikit学习中为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)

这是可能的,因为scikit学习拉索实现中的代码包含

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, :]

然而,在我看来,对于大多数问题,默认的初始系数(零)是最好的。事实上,当你应用套索时,你通常预计它的大多数最终系数都是零——为什么不从全零开始呢?

在退化设计矩阵的情况下,拉索解确实是非唯一的。但是不可能存在多个不相交的局部最优(就像在神经网络中一样),因为代价函数仍然是(非严格)凸的。相反,可能存在一组连续的(也是凸的)同样好的解。这种模糊性的一个最简单的情况是当x由两个相同的列组成时:系数(beta, 0)(0, beta)$,并且它们的所有凸组合都是相等的。

如果是这样的话,从多个随机点简单地重新启动不会给你一整套解决方案。相反,您需要使用特殊的技术来以某种方式定义其角点(极值),或者以某种方式在该集合中定义"最佳"解决方案。定义唯一"最佳"解的一种方法是LARS算法(sklearn.linear_model.Lars),它在不确定的情况下赋予所有协变量"平等的权利"。

相关内容

  • 没有找到相关文章

最新更新