Col*_*vel 5 python graph scikit-learn
我的问题对 scikit 中的套索很笼统:
我正在使用 Lasso 进行回归以将一定数量的点拟合y_i到 features x_i。点的数量n严格低于p特征的维度。
因此,对于给定的惩罚 alpha 系数,存在多种解决方案。
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)
Run Code Online (Sandbox Code Playgroud)
这是可能的,因为scikit-learn Lasso 实现中的代码包含
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, :]
Run Code Online (Sandbox Code Playgroud)
然而,在我看来,默认的初始系数(零)对于大多数问题来说是最好的。事实上,当您应用套索时,您通常期望其最终系数大部分为零 - 为什么不从全零开始呢?
在退化设计矩阵的情况下,Lasso 解决方案确实是非唯一的。但不可能存在多个不相交的局部最优(就像在神经网络中一样),因为成本函数仍然(非严格)凸。相反,可能存在一组连续的(也是凸的)同样好的解决方案。这种歧义的最简单情况是x由两个相同的列组成:系数(beta, 0)、(0, beta)$ 以及它们的所有凸组合都表现得同样好。
如果是这种情况,简单地从多个随机点重新启动将不会为您提供整套解决方案。相反,您需要使用特殊技术以某种方式定义其角(极值)点,或者以某种方式定义该组中的“最佳”解决方案。定义唯一“最佳”解决方案的一种方法是LARS 算法( sklearn.linear_model.Lars),它在不确定情况下为所有协变量赋予“平等权利”。
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |