标签: lasso-regression

运行glmnet()的大矩阵

我有一个问题,用宽数据集运行glmnet套索.我的数据N = 50,但p> 49000,所有因素.所以要运行glmnet,我必须创建一个model.matrix,但是当我调用model.matrix(formula,data)时,我的内存耗尽,其中formula = Class~.

作为一个工作示例,我将生成一个数据集:

data <- matrix(rep(0,50*49000), nrow=50)
for(i in 1:50) {
x = rep(letters[2:8], 7000)
y = sample(x=1:49000, size=49000)
data[i,] <- x[y]
}

data <- as.data.frame(data)
x = c(rep('A', 20), rep('B', 15), rep('C', 15))
y = sample(x=1:50, size=50)
class = x[y]
data <- cbind(data, class)
Run Code Online (Sandbox Code Playgroud)

之后,我尝试创建一个model.matrix进入glmnet.

  formula <- as.formula(class ~ .)
  X = model.matrix(formula, data)
  model <- cv.glmnet(X, class, standardize=FALSE, family='multinomial', alpha=1, nfolds=10)
Run Code Online (Sandbox Code Playgroud)

在最后一步(X = model.matrix ...),我的内存不足.我能做什么?

r lasso-regression bigdata glmnet model.matrix

20
推荐指数
2
解决办法
8773
查看次数

LASSO与$\lambda = 0 $和OLS在R glmnet中产生不同的结果

我期望LASSO没有惩罚($\lambda = 0 $)来产生与OLS拟合相同(或非常相似)的系数估计.但是,我在R中得到不同的系数估计值,将相同的数据(x,y)放入其中

  • glmnet(x, y , alpha=1, lambda=0) 对于LASSO而言,没有任何惩罚和
  • lm(y ~ x) 适合OLS.

这是为什么?

r lasso-regression least-squares lm

13
推荐指数
2
解决办法
1650
查看次数

glmnet NA/NaN/Inf中的套索错误

我遇到了glmnet的问题,因为我不断收到错误消息

"Error in elnet(x, is.sparse, ix, jx, y, weights, offset, type.gaussian,  : NA/NaN/Inf in foreign function call (arg 5)
In addition: Warning message:
In elnet(x, is.sparse, ix, jx, y, weights, offset, type.gaussian,  : NAs introduced by coercion"
Run Code Online (Sandbox Code Playgroud)

下面我可以使用'iris'数据集复制错误,但这里是我的特定数据的简化代码:

vars <- as.matrix(ind.vars)
lasso <- glmnet(vars, y=cup98$TARGET_D, alpha=1)
Run Code Online (Sandbox Code Playgroud)

以下是您可以轻松复制的内容:

data(iris)
attach(iris)
x <- as.matrix(data.frame(Sepal.Width, Petal.Length, Petal.Width, Species))
y <- Sepal.Length
lasso <- glmnet(x,y=y, alpha=1)
Run Code Online (Sandbox Code Playgroud)

非常感谢大家!

r lasso-regression glmnet

10
推荐指数
1
解决办法
2万
查看次数

是否在Statsmodels中实现了LASSO回归?

我很乐意在statsmodels中使用线性LASSO回归,因此为了能够使用'公式'表示法来编写模型,这可以在处理许多分类变量及其交互时节省相当多的编码时间.但是,它似乎尚未在统计模型中实现?

python regression lasso-regression statsmodels

9
推荐指数
1
解决办法
5848
查看次数

glmnet中的默认lambda序列用于交叉验证

有人知道cv.glmnet(在R的glmnet中)或LassoCV(scikit-learn)如何选择用于交叉验证的正则化常数(lambda)序列?非常感谢你!

lasso-regression glmnet

8
推荐指数
1
解决办法
3162
查看次数

glmnet如何计算最大lambda值?

glmnet软件包使用从最大值缩放的一系列LASSO调整参数lambda,lambda_max在这些参数下没有选择预测变量.我想知道如何glmnet计算这个lambda_max值.例如,在一个简单的数据集中:

set.seed(1)
library("glmnet")
x <- matrix(rnorm(100*20),100,20)
y <- rnorm(100)
fitGLM <- glmnet(x,y)
max(fitGLM$lambda)
# 0.1975946
Run Code Online (Sandbox Code Playgroud)

包装插图(http://www.jstatsoft.org/v33/i01/paper)在2.5节中描述了它计算此值如下:

sx <- as.matrix(scale(x))
sy <- as.vector(scale(y))
max(abs(colSums(sx*sy)))/100
# 0.1865232
Run Code Online (Sandbox Code Playgroud)

这显然是接近但不是相同的价值.那么,是什么导致了这种差异?在一个相关的问题中,我如何计算lambda_max逻辑回归?

r lasso-regression glmnet

8
推荐指数
2
解决办法
4045
查看次数

在带有分类变量的R中使用LASSO

我有一个包含1000个观测值和76个变量的数据集,其中约有20个是分类的。我想在整个数据集上使用LASSO。我知道通过lars或glmnet在LASSO中使用因子变量并不能真正起作用,但是变量太多了,它们可以采用太多不同的无序值来对它们进行合理的数字编码。

在这种情况下可以使用LASSO吗?我该怎么做呢?创建预测变量矩阵可产生以下响应:

hdy<-as.numeric(housingData2[,75])
hdx<-as.matrix(housingData2[,-75])
model.lasso <- lars(hdx, hdy)
Error in one %*% x : requires numeric/complex matrix/vector arguments
Run Code Online (Sandbox Code Playgroud)

我认识到其他方法可能更容易或更合适,但是实际的挑战是使用Lars或glmnet来做到这一点,因此,如果可能的话,我将不胜感激任何想法或反馈。

谢谢,

regression r lasso-regression glmnet lars

7
推荐指数
2
解决办法
8909
查看次数

我应该如何获得套索模型的系数?

这是我的代码:

library(MASS)
library(caret)
df <- Boston
set.seed(3721)
cv.10.folds <- createFolds(df$medv, k = 10)
lasso_grid <- expand.grid(fraction=c(1,0.1,0.01,0.001))
lasso <- train(medv ~ ., 
               data = df, 
               preProcess = c("center", "scale"),
               method ='lasso',
               tuneGrid = lasso_grid,
               trControl= trainControl(method = "cv", 
                                       number = 10, 
                                       index = cv.10.folds))  

lasso
Run Code Online (Sandbox Code Playgroud)

与线性模型不同,我无法从摘要(套索)中找到套索回归模型的系数。我该怎么做?或者我可以使用 glmnet 吗?

r lasso-regression r-caret

6
推荐指数
1
解决办法
4434
查看次数

在python中使用cvxpy包构建融合套索惩罚

Fused Lasso (Tibshirani 等人,2005)鼓励系数的稀疏性及其差异的稀疏性。

这是损失函数和正则化的公式:【公式截图】(https://cdn1.imggmi.com/uploads/2019/11/17/967043f94a1382c5e14fdd1eb25bad9e-full.png)
第一项是 L2 (mse) 损失,第二项是对系数的 L1 惩罚(Lasso 正则化),最后一项是链接文章中引入的新项。

我如何用cvxpy包来模仿这个 - 具体来说,我如何实现最后一项?

分别有LassoRidge Penalties 的示例代码。我大致了解这些代码是如何工作的,但有一些功能我不知道我应该如何决定使用哪一个。例如,让我们比较 Lasso 和 Ridge 惩罚代码。

# Lasso

import cvxpy as cp
import numpy as np
import matplotlib.pyplot as plt

def loss_fn(X, Y, beta):
    return cp.norm2(cp.matmul(X, beta) - Y)**2

def regularizer(beta):
    return cp.norm1(beta)

def objective_fn(X, Y, beta, lambd):
    return loss_fn(X, Y, beta) + lambd * regularizer(beta)

def mse(X, Y, beta):
    return (1.0 / X.shape[0]) * loss_fn(X, Y, beta).value …
Run Code Online (Sandbox Code Playgroud)

python lasso-regression cvxpy

6
推荐指数
1
解决办法
1306
查看次数

如何使用 scipy.minimize 最小化套索损失函数?

主要问题:为什么 Lasso 回归的系数不会通过 最小化而缩小到零scipy.minimize

我正在尝试使用 scipy.minimize 创建套索模型。然而,它仅在 alpha 为零时才起作用(因此仅像基本平方误差一样)。当 alpha 不为零时,它会返回更差的结果(更高的损失),并且仍然没有一个系数为零。

我知道 Lasso 是不可微分的,但我尝试使用 Powell 优化器,它应该处理非微分损失(我也尝试过 BFGS,它应该处理非平滑)。这些优化器都不起作用。

为了测试这一点,我创建了数据集,其中 y 是随机的(此处提供是可重现的),X 的第一个特征恰好是 y*.5,其他四个特征是随机的(此处也提供是可重现的)。我希望算法将这些随机系数缩小到零并只保留第一个系数,但它没有发生。

对于套索损失函数,我使用本文中的公式(图 1,第一页)

我的代码如下:

from scipy.optimize import minimize
import numpy as np

class Lasso:

    def _pred(self,X,w):
        return np.dot(X,w)

    def LossLasso(self,weights,X,y,alpha):
        w = weights
        yp = self._pred(X,w)
        loss = np.linalg.norm(y - yp)**2 + alpha * np.sum(abs(w))
        return loss

    def fit(self,X,y,alpha=0.0):
        initw = np.random.rand(X.shape[1]) #initial weights
        res = minimize(self.LossLasso,
                    initw,
                    args=(X,y,alpha),
                    method='Powell')
        return res

if __name__=='__main__': …
Run Code Online (Sandbox Code Playgroud)

machine-learning lasso-regression scipy data-science loss-function

6
推荐指数
1
解决办法
1845
查看次数