# 基于ANOVA与多模型对比的基因分类方法 **Repository Path**: li_b_wen/gene-expression ## Basic Information - **Project Name**: 基于ANOVA与多模型对比的基因分类方法 - **Description**: 一种结合方差分析(ANOVA)过滤式特征选择与多分类器对比的集成学习框架。针对包含7070个基因、69个样本的五类脑肿瘤数据集,首先采用分位数裁剪、低变异过滤和Z-score标准化进行数据预处理;然后通过5折分层交叉验证在候选特征数集合中评估五种分类器(MLP、CNN、SVM、RF、KNN)的性能,并根据理论最佳准确率(68/69≈98.55%)筛选最接近的模型。 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-04 - **Last Updated**: 2026-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于ANOVA特征选择与多模型对比的基因表达数据分类方法 本项目实现了论文《基于ANOVA特征选择与多模型对比的基因表达数据分类方法》中的实验代码。针对基因表达数据的高维小样本特性,提出了一种结合方差分析(ANOVA)过滤式特征选择与多模型对比的集成学习框架。在包含 7070 个基因、69 个样本的五类脑肿瘤数据集上,通过 5 折分层交叉验证筛选最优特征数,并基于理论最佳准确率(68/69 ≈ 98.55%)选择最接近的模型作为最终预测模型。实验结果表明,随机森林(RF)在特征数 N=250 时取得 98.57% ± 2.86% 的交叉验证准确率,被选为最终模型。 ## 目录 - [环境要求](#环境要求) - [数据集](#数据集) - [安装与依赖](#安装与依赖) - [使用方法](#使用方法) - [代码结构](#代码结构) - [实验结果](#实验结果) - [引用](#引用) - [许可证](#许可证) ## 环境要求 - Python 3.8+ - PyTorch 1.12+ - scikit-learn 1.0+ - 其他依赖见 `requirements.txt` 建议使用 GPU 运行(已自动检测),若无 GPU 则自动使用 CPU。 ## 数据集 实验采用中枢神经系统胚胎性肿瘤的基因微阵列数据集,包含以下文件: - `pp5i_train.gr.csv`:训练数据,7070 个基因(行) × 69 个样本(列) - `pp5i_train_class.txt`:训练样本类别标签,每行一个类别(EPD、JPA、MED、MGL、RHB) - `pp5i_test.gr.csv`:测试数据,7070 个基因 × 23 个样本(无标签) 数据集未包含在本仓库中,请确保运行前将上述文件放置于工作目录下。 ## 安装与依赖 1. 克隆本仓库: ```bash git clone https://gitee.com/li_b_wen/gene-expression.git cd gene-expression ``` 2. 安装依赖: ```bash pip install -r requirements.txt ``` `requirements.txt` 内容如下: ``` numpy pandas torch scikit-learn matplotlib joblib ``` ## 使用方法 ### 1. 运行完整实验 直接运行主脚本: ```bash python main.py ``` 脚本将依次执行: - 数据加载与预处理(分位数裁剪、低变异过滤、标准化) - 标签编码 - 在候选特征数 N ∈ [25, 50, ..., 600] 上进行 5 折交叉验证,评估 MLP、CNN、SVM、RF、KNN 五种分类器 - 根据理论最佳准确率(68/69 ≈ 98.55%)选择全局最优模型及其特征数 - 使用最优模型在全部训练数据上重新训练,并对测试集进行预测 - 保存性能数据 `model_performance.csv`、预测结果 `test_predictions.csv`(若开启集成则另存 `test_predictions_ensemble.csv`) - 保存最终模型:PyTorch 模型保存为 `model.pth`,sklearn 模型保存为 `model.pkl` - 生成可视化图表:模型性能曲线 `model_performance_curves.png`、类别分布饼图 `class_distribution_pie.png`、条形图 `class_distribution_bar.png` ### 2. 可选配置 脚本顶部包含若干开关,可根据需要调整: ```python USE_ADVANCED_CLEANING = True # 开启高级数据清理(分位数裁剪、异常样本剔除) USE_MULTI_FS = False # 是否使用多种特征选择方法(若为 True 则同时运行 mutual_info) USE_ENSEMBLE_PRED = False # 是否开启多模型软投票集成预测 USE_CNN = True # 是否启用 CNN 模型 ``` 您可以根据需要修改这些标志以进行不同实验。 ## 代码结构 ``` . ├── main.py # 主实验脚本 ├── requirements.txt # 依赖列表 ├── README.md # 本文件 ├── model_performance.csv # 各模型交叉验证性能(运行后生成) ├── test_predictions.csv # 测试集预测结果(运行后生成) ├── test_predictions_ensemble.csv # 集成预测结果(若开启) ├── model.pth / model.pkl # 保存的最终模型 ├── model_performance_curves.png # 性能曲线图 ├── class_distribution_pie.png # 类别分布饼图 ├── class_distribution_bar.png # 类别分布条形图 └── (数据集文件) # 需自行放置 ``` ## 实验结果 根据论文实验,主要结果如下: - 随机森林(RF)在特征数 N=250 时达到 98.57% ± 2.86% 的交叉验证准确率,与理论最佳值 98.55% 仅差 0.0002,被选为最终模型。 - 多层感知机(MLP)和支持向量机(SVM)分别达到 97.14% 的准确率。 - 数据集中存在一个可能的误标记 MED 样本(编号 38),剔除后各模型性能普遍提升。 详细结果请参考 `model_performance.csv` 及论文正文。 ## 引用 如果您使用了本代码或参考了本文方法,请引用以下论文(待发表): ``` 朱勇. 基于ANOVA特征选择与多模型对比的基因表达数据分类方法[J]. 软件学报, 2026. ``` ## 许可证 本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。 ``` 您可以根据实际情况调整其中细节,例如修改作者名、论文状态等。如果不需要 `requirements.txt`,可以去掉相关描述。此 README 已覆盖用户公开项目所需的基本信息。