R语言特征筛选(lasso, 岭回归,弹性网络,SVM)

最后发布时间:2023-05-10 14:46:41 浏览量:

背景

svm-rfe(support vector machine - recursive feature elimination)是基于支持向量机的机器学习方法,通过删减svm产生的特征向量来寻找最佳变量。
lasso lr(logistic regression)也是机器学习的方法之一,通过寻找分类错误最小时的λ来确定变量。

lasso

  • alpha=1 is the lasso penalty, and alpha=0 the ridge penalty.

在R语言中,可以使用glmnet包实现LASSO算法进行特征筛选

# 加载glmnet包
library(glmnet)

# 生成模拟数据
set.seed(123)
n <- 100 # 样本数
p <- 20 # 特征数
x <- matrix(rnorm(n * p), n, p)
y <- rnorm(n)

# 将数据集分成训练集和测试集
train.idx <- sample(n, n * 0.8) # 训练集索引
train.x <- x[train.idx, ]
train.y <- y[train.idx]
test.x <- x[-train.idx, ]
test.y <- y[-train.idx]

# 建立LASSO模型
lasso.fit <- glmnet(train.x, train.y, alpha = 1)

# 输出LASSO模型系数
coef(lasso.fit)

# 交叉验证选择正则化参数
cv.fit <- cv.glmnet(train.x, train.y, alpha = 1)
plot(cv.fit)

在这个示例代码中,首先生成了一个模拟数据集,并将其分为训练集和测试集。然后,使用glmnet函数建立LASSO模型,并使用cv.glmnet函数进行交叉验证选择正则化参数。

生信小木屋

# 获取最优的正则化参数
best.lambda <- cv.fit$lambda.min

# 基于最优的正则化参数建立最终的LASSO模型
final.fit <- glmnet(train.x, train.y, alpha = 1, lambda = best.lambda)

# 输出LASSO模型系数
coef(final.fit)

# 对测试集进行预测
pred.y <- predict(final.fit, newx = test.x)

最后,基于最优的正则化参数建立最终的LASSO模型,并对测试集进行预测。在输出系数的过程中,可以看到一些系数已经被缩小为0,这表明相应的特征已被筛选掉。

# 获取系数并进行可视化
coef.df <- data.frame(name = paste0("X", 1:p),
                      coef = final.fit$beta[, 1])
ggplot(coef.df, aes(x = name, y = coef)) +
  geom_col() +
  coord_flip() +
  labs(x = "Feature", y = "Coefficient") +
  ggtitle("LASSO Feature Selection")

参考

快捷入口
R 思维导图 浏览PDF 下载PDF
分享到:
标签