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")
参考
- CpG Methylation Signature Predicts Recurrence in Early-Stage Hepatocellular Carcinoma: Results From a Multicenter Study
- glmnet
- sigFeature: Significant feature selection using SVM-RFE & t-statistic
- e1071 This package was the first implementation of SVM in R
- randomForest
- caret: Classification and Regression Training
- 正则化技术-特征筛选