我试图使用lars包进行套索回归,但似乎无法使lars位工作.我输入了代码:
diabetes<-read.table("diabetes.txt", header=TRUE)
diabetes
library(lars)
diabetes.lasso = lars(diabetes$x, diabetes$y, type = "lasso")
Run Code Online (Sandbox Code Playgroud)
但是,我收到一条错误消息:rep(1,n)中的错误:无效的'times'参数.
我试过这样输入:
diabetes<-read.table("diabetes.txt", header=TRUE)
library(lars)
data(diabetes)
diabetes.lasso = lars(age+sex+bmi+map+td+ldl+hdl+tch+ltg+glu, y, type = "lasso")
Run Code Online (Sandbox Code Playgroud)
但后来我收到错误消息:'lars中的错误(年龄+性别+ bmi +地图+ td + ldl + hdl + tch + ltg + glu,y,type ="lasso"):找不到对象'age'
我哪里错了?
编辑:数据 - 如下所示,但另外5列.
ldl hdl tch ltg glu
1 -0.034820763 -0.043400846 -0.002592262 0.019908421 -0.017646125
2 -0.019163340 0.074411564 -0.039493383 -0.068329744 -0.092204050
3 -0.034194466 -0.032355932 -0.002592262 0.002863771 -0.025930339
4 0.024990593 -0.036037570 0.034308859 0.022692023 -0.009361911
5 0.015596140 0.008142084 -0.002592262 -0.031991445 -0.046640874
Run Code Online (Sandbox Code Playgroud) 我很难通过R包估算lars我的数据模型.
例如,我创建一个假数据集x和相应的值y,如下所示:
x = cbind(runif(100),rnorm(100))
colnames(x) = c("a","b")
y = 0.5 + 3 * x[,1,drop = FALSE]
Run Code Online (Sandbox Code Playgroud)
接下来,我使用lars函数训练一个使用套索正则化的模型:
m = lars(x,y,type = "lasso", normalize = FALSE, intercept = TRUE)
Run Code Online (Sandbox Code Playgroud)
现在我想知道估计的模型是什么(that I know to be: y = 0.5 + 3 * x[,1] + 0 * x[,2])
我只对最后一步获得的系数感兴趣:
cf = predict(m, x, s=1, mode = "fraction", type = "coef")$coef
cf
a b
3 0
Run Code Online (Sandbox Code Playgroud)
这些是我期望的系数,但是我找不到从中获取intercept(0.5)的方法m.
我试图检查predict.lars适合的代码,如下所示:
fit = drop(scale(newx,
object$meanx, FALSE) %*% …Run Code Online (Sandbox Code Playgroud) 我正在尝试对来自 lasso2 包的前列腺癌数据运行不同的回归模型。当我使用 Lasso 时,我看到了两种不同的方法来计算均方误差。但他们确实给了我完全不同的结果,所以我想知道我是否做错了什么,或者这是否只是意味着一种方法比另一种更好?
# Needs the following R packages.
library(lasso2)
library(glmnet)
# Gets the prostate cancer dataset
data(Prostate)
# Defines the Mean Square Error function
mse = function(x,y) { mean((x-y)^2)}
# 75% of the sample size.
smp_size = floor(0.75 * nrow(Prostate))
# Sets the seed to make the partition reproductible.
set.seed(907)
train_ind = sample(seq_len(nrow(Prostate)), size = smp_size)
# Training set
train = Prostate[train_ind, ]
# Test set
test = Prostate[-train_ind, ]
# Creates matrices for independent and dependent …Run Code Online (Sandbox Code Playgroud) r machine-learning lasso-regression glmnet mean-square-error
scikit-learn包提供了函数Lasso(),LassoCV()但没有选项来适应逻辑函数而不是线性函数...如何在python中执行逻辑套索?
我正在尝试在Python中重现以下R结果。在这种特殊情况下,R预测技能低于Python技能,但是根据我的经验通常不是这种情况(因此,需要在Python中重现结果的原因),因此请在此处忽略此详细信息。
目的是预测花的种类('versicolor'0或'virginica'1)。我们有100个带有标签的样本,每个样本包含4个花特征:萼片长度,萼片宽度,花瓣长度,花瓣宽度。我已将数据分为训练(数据的60%)和测试集(数据的40%)。将10倍交叉验证应用于训练集以搜索最佳lambda(在scikit-learn中优化的参数为“ C”)。
我在R 中将glmnet的 alpha设置为1(对于LASSO惩罚),对于python,则使用scikit-learn的LogisticRegressionCV函数和“ liblinear”求解器(可以与L1罚分一起使用的唯一求解器)。交叉验证中使用的评分指标在两种语言之间是相同的。但是,模型结果有所不同(针对每个特征找到的截距和系数相差很大)。
R代码
library(glmnet)
library(datasets)
data(iris)
y <- as.numeric(iris[,5])
X <- iris[y!=1, 1:4]
y <- y[y!=1]-2
n_sample = NROW(X)
w = .6
X_train = X[0:(w * n_sample),] # (60, 4)
y_train = y[0:(w * n_sample)] # (60,)
X_test = X[((w * n_sample)+1):n_sample,] # (40, 4)
y_test = y[((w * n_sample)+1):n_sample] # (40,)
# set alpha=1 for LASSO and alpha=0 for ridge regression
# use class for logistic regression
set.seed(0)
model_lambda <- cv.glmnet(as.matrix(X_train), as.factor(y_train), …Run Code Online (Sandbox Code Playgroud) 我正在为 R 中的波士顿住房数据构建分位数回归模型 + LASSO 惩罚。我发现了 2 个可以构建此类模型的包:rqPen 和 quantreg。rqPen 实现了一个交叉验证过程来调整 LASSO 参数 lambda,所以我决定使用这个。我考虑了算法自动选择的 100 个不同的 lambda 值和 10 倍:
library(rqPen)
library(mlbench)
data("BostonHousing")
help(BostonHousing)
x_boston <- data.matrix(BostonHousing[,-14])
y_boston <- BostonHousing[,14]
cv_m1_boston <- cv.rq.pen(x_boston,y_boston, penalty="LASSO", nlambda=100, nfolds=10, tau=.5, cvFunc="AE")
Run Code Online (Sandbox Code Playgroud)
CV 的结果是,当 lambda 值为 0.46 时,最小绝对误差为 4.2。该模型仅考虑预测变量“zn、”tax”、“b”和“lstat”,并将与其余预测变量相关的系数发送为零。
m1_boston <- rq.lasso.fit(x_boston[i_train,], y_boston[i_train], tau=0.5, lambda=0.46)
Coefficients:
intercept crim zn indus chas nox rm age dis rad
27.175724364 0.000000000 0.025560221 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000
tax ptratio b lstat
-0.008151729 0.000000000 0.007577458 -0.495927958 …Run Code Online (Sandbox Code Playgroud) 我正在使用 glmnet 包在 R 中执行套索回归:
fit.lasso <- glmnet(x,y)
plot(fit.lasso,xvar="lambda",label=TRUE)
Run Code Online (Sandbox Code Playgroud)
然后使用交叉验证:
cv.lasso=cv.glmnet(x,y)
plot(cv.lasso)
Run Code Online (Sandbox Code Playgroud)
一个教程(最后一张幻灯片)为 R^2 建议以下内容:
R_Squared = 1 - cv.lasso$cvm/var(y)
Run Code Online (Sandbox Code Playgroud)
但它没有用。
我想了解拟合数据的模型效率/性能。正如我们在 r 中执行 lm() 函数时通常得到 R^2 并调整 R^2 一样。
我正在 R 中使用 glmnet 运行以下(截断的)代码
# do a lot of things to create the design matrix called x.design
> glmnet(x.design, y, thresh=1e-11)
Run Code Online (Sandbox Code Playgroud)
其中x.design是nxp设计矩阵,其中n > p,y是使用核密度估计获得的响应的nx 1向量。x.design和y都包含真实条目。当我运行我的代码时,收到以下错误消息:
Error in if (nulldev == 0) stop("y is constant; gaussian glmnet fails at
standardization step") : missing value where TRUE/FALSE needed
Run Code Online (Sandbox Code Playgroud)
我曾访问过并阅读过
在 R 中运行 glmnet 包,出现错误“缺少 TRUE/FALSE 需要的值”,可能是由于缺少值?
但是我无法找到解决我的问题的方法。
有人可以建议一个解决方案吗?
亲爱的程序员小伙伴们,
我正在尝试通过惩罚向量自回归分析高维数据集(31 个变量,1100 个观察值)。
由于我使用的是 Diebold 等人介绍的技术。al (2019) 通过方差分解矩阵构建连通性网络。我想在 r 中使用他们的包:https : //www.rdocumentation.org/packages/vars/versions/1.5-3/topics/fevd
但是,此包只能与常规 VAR 估计一起使用。我想使用惩罚回归,例如LASSO。那么我如何在 R 中使用他们的包,并带有惩罚的 VAR?
我尝试了什么?他们是 github 上的 Lassovars 包,但是,我不能在 fevd() 函数中使用它。它说:只使用来自 Vars 类的估计。
期待您的回复!
亲切的问候,
巴特
假设响应和协变量数据如下:
(1.4, 0.0), (1.4, -2.0), (0.8, 0.0), (0.4,2.0).
Run Code Online (Sandbox Code Playgroud)
我想(1, -1/8)通过将惩罚参数应用于斜率来找到脊参数 k,为此脊估计是。
lasso-regression ×10
r ×8
glmnet ×3
regression ×3
lars ×2
python ×2
scikit-learn ×2
intercept ×1
package ×1
response ×1