我的问题在于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)
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),它为不确定情况下的所有协变量赋予“平等权利”.
标签:python,graph,scikit-learn
来源: https://codeday.me/bug/20190708/1403368.html