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