首页 > 其他分享 >R:SVM-RFE特征筛选与分类性能分析脚本

R:SVM-RFE特征筛选与分类性能分析脚本

时间:2024-12-15 15:55:13浏览次数:5  
标签:脚本 SVM 性能 分类 RFE 筛选

# 清理环境和设置工作目录
rm(list = ls())
setwd("C:\\Users\\Administrator\\Desktop\\machine learning\\SVM-RFE\\CAZy")
set.seed(127)

# 加载数据
input <- read.table("matched_otu.txt", header = TRUE, row.names = 1, sep = "\t")

# 加载必要的包
library(e1071)
library(caret)
library(parallel)
library(ggplot2)
library(kernlab)

# 准备数据
response <- as.factor(input[, "group"])  # 响应变量
features <- input[, -1]       # 特征矩阵(去掉 group)

# 定义并行计算环境
cl <- makeCluster(detectCores() - 1)  # 使用所有核心,留一个空闲
clusterExport(cl, c("features", "response"))  # 导出全局变量到每个工作节点
clusterEvalQ(cl, library(e1071))  # 在每个核心加载必要的包

# 定义SVM-RFE函数
svm_rfe <- function(features, response, n_folds = 10) {
  rfe_control <- rfeControl(
    functions = caretFuncs,
    method = "cv",
    number = n_folds,
    allowParallel = TRUE
  )
  
  # 使用支持向量机进行RFE
  rfe_results <- rfe(
    x = features,
    y = response,
    sizes = seq(1, ncol(features), by = 1),  # 逐步减少特征
    rfeControl = rfe_control,
    method = "svmLinear"  # 使用线性核支持向量机
  )
  
  return(rfe_results)
}

# 执行SVM-RFE
rfe_results <- svm_rfe(features, response)

# 停止并行计算
stopCluster(cl)

# 保存特征重要性
importance <- varImp(rfe_results)
write.table(importance, "feature_importance.txt", sep = "\t", col.names = NA, quote = FALSE)

# 可视化:泛化误差与特征数的关系
performance_data <- data.frame(
  Features = rfe_results$results$Variables,
  Accuracy = rfe_results$results$Accuracy
)

ggplot(performance_data, aes(x = Features, y = Accuracy)) +
  geom_line(color = "blue") +
  geom_point(color = "red") +
  labs(
    title = "Feature Number vs Accuracy",
    x = "Number of Features",
    y = "Accuracy"
  ) +
  theme_minimal()

# 保存图表
ggsave("feature_vs_accuracy.png", width = 8, height = 6)

# 找出最佳特征数量(最高准确率对应的特征数量)
best_feature_count <- performance_data$Features[which.max(performance_data$Accuracy)]

# 绘制图像
p <- ggplot() +
  # 绘制准确率曲线(灰色线表示所有特征数量的表现)
  geom_line(data = performance_data, aes(x = Features, y = Accuracy), color = "gray", alpha = 0.8) +
  # 在最高准确率点绘制加粗的蓝色曲线
  geom_line(data = performance_data, aes(x = Features, y = Accuracy), color = "blue", size = 1.5) +
  # 标注最佳特征数量的垂直虚线
  geom_vline(xintercept = best_feature_count, linetype = "dashed", color = "red") +
  # 添加标注
  annotate(
    "text", 
    x = best_feature_count, 
    y = max(performance_data$Accuracy), 
    label = paste("Best feature count:", best_feature_count), 
    hjust = -0.1, vjust = -0.3, 
    size = 5, color = "red"
  ) +
  # 自定义标题和坐标轴
  labs(
    title = "Relationship Between Feature Count and Accuracy",
    x = "Number of Features",
    y = "Accuracy"
  ) +
  # 设置白色背景样式
  theme_bw() +
  # 定制样式
  theme(
    plot.title = element_text(hjust = 0.5, size = 20),  # 居中标题
    axis.line.x = element_line(size = 1.2, color = "black"),  # 保留下边框
    axis.line.y = element_line(size = 1.2, color = "black"),  # 保留左边框
    axis.text = element_text(size = 18),  # 坐标轴标签
    axis.title = element_text(size = 18),  # 坐标轴标题
    axis.ticks = element_line(size = 1.2),  # 刻度线
    panel.grid.major = element_blank(),  # 去掉主要网格线
    panel.grid.minor = element_blank(),  # 去掉次要网格线
    panel.border = element_blank()       # 去掉上边框和右边框
  )

# 显示图形
print(p)

# 保存图形
ggsave("feature_vs_accuracy_styled.png", plot = p, width = 8, height = 8, dpi = 1200)

 

标签:脚本,SVM,性能,分类,RFE,筛选
From: https://www.cnblogs.com/wzbzk/p/18608055

相关文章

  • R:LASSO 回归特征筛选与路径分析脚本
    #清理环境和加载必要包rm(list=ls())setwd("C:\\Users\\Administrator\\Desktop\\machinelearning\\LASSO回归\\CAZy")#设置工作目录train<-read.table("matched_otu.txt",header=TRUE,row.names=1,sep="\t")#############......
  • R : 数据行匹配与筛选脚本
    #清除工作空间rm(list=ls())#设置工作目录setwd("C:\\Users\\Administrator\\Desktop\\machinelearning\\Heatmap\\CAZy")#读取数据otu<-read.table("TPM.CAZy.raw.txt",sep="\t",header=TRUE,row.names=1)lda<-......
  • 【代码设计】Java 用注解简洁明了的标注数据筛选特性
    基础设计默认值:仅包含正常状态数据,例如账户:不包含离职账户的正常账户即为deletedData=false,wantsEnabled=true,wantsDisabled=false场景举例:场景一:正常的只展示正常的账户,则为默认的情况场景二:只搜索不正常的已经删除的账户,则与上一条完全相反,则为wantsEnabled=......
  • python 筛选目标区域内的站点
    想处理一下黄河流域内的国家站点数据,那么我需要筛选黄河流域内有哪些站点这里涉及到:青海、四川、甘肃、宁夏、陕西、内蒙、山西、河南、山东有这些省的所有国家站列表,但是需要筛出黄河流域内的站点我用文心一言查了查代码,py使用的是3.9,代码和文心一言给出的有点出入,尤其是使用:s......
  • 无痕检测是否注册iMessage服务,iMessages数据筛选,iMessage蓝号检测协议
    一、实现iMessage蓝号数据筛选的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2.编写协议......
  • 质数-质数筛选、质因数分解、互质判定
    质数筛选对于一个正整数N,一次性求出 1~N 之间所有的质数,即为质数筛选。显然根据上述「质数判定」的内容,我们可以通过枚举 1~N 的所有数,再依次使用「试除法」来判定其是否为质数,从而完成质数的筛选。但此种方法的时间复杂度过高,为 O(N√N) 。质数筛选经典方法:「Eratosthene......
  • 筛选器命令FF(Find)
    命令名称:FFFind重复Find功能需求:选中一个图元,判断其所属图层,再次指定区域,亮现区域内所有此图层的图元思路:建立2个选择集SS存源图元不喜欢点选图元就框选通过(ssget)获得源图元图层SSS存符合条件的区域图元AUTOLISP实现(DEFUNC:TE(/SSenENDATAENLAYERl......
  • 【机器学习】支持向量机(SVM)详解:原理与优化
    支持向量机(SVM)详解:原理与优化支持向量机(SVM)详解1.基本概念2.数学原理2.1线性可分情况2.2最优化问题2.3拉格朗日对偶问题2.4核函数技巧(KernelTrick)2.5非线性分类与支持向量3.优缺点分析3.1优点3.2缺点4.SVM与其他算法的比较5.总结支持向量机(SVM......
  • 查询数据的筛选
    1在input框中模糊查处输入的内容input框失去焦点点击查看代码exportfunctionfuzzyQuery(list,keyWord){console.log('要筛选的数据',list)console.log('筛选的关键词',keyWord)vararr=[];for(vari=0;i<list.length;i++){if(list[i].na......
  • 【机器学习】机器学习的基本分类-监督学习-支持向量机(Support Vector Machine, SVM)
    支持向量机是一种强大的监督学习算法,主要用于分类问题,但也可以用于回归和异常检测。SVM的核心思想是通过最大化分类边界的方式找到数据的最佳分离超平面。1.核心思想目标给定训练数据,其中是特征向量,是标签,SVM的目标是找到一个超平面将数据分开,同时最大化分类边界的......