## IASML：Intelligent Agricultural Solutions of Machine Learning

IASML（Intelligent Agricultural Solutions of Machine Learning）是一个面向**作物与畜禽育种**的通用机器学习平台，用于从基因组、转录组等多组学数据中预测目标性状。平台同时提供命令行程序和可视化 Web 界面，便于不同背景的科研人员使用。

本文档简要说明 IASML 的**数据输入格式、主要算法模型、降维与集成策略、验证评估方法以及整体工作流程**。

---

### 1. 数据输入与预处理

#### 1.1 基因型 / 特征数据

IASML 支持两类主要输入格式：

- **PLINK 二进制格式（`--bfile`）**  
  - 需要提供同名前缀的 `.bed / .bim / .fam` 三个文件。  
  - `.bed`：个体 × 标记的基因型矩阵（编码为 0/1/2 或缺失值）。  
  - `.bim`：标记注释信息，包括染色体、物理位置、等位基因等。  
  - `.fam`：个体信息与表型占位（在 IASML 中表型由独立文件提供）。  

- **TXT 矩阵格式（`--tfile`）**  
  - 文本分隔文件（通常为制表符分隔），每行一个个体、每列一个分子标记或特征。  
  - 第一行通常为特征名，第一列为个体 ID，剩余单元为数值型特征。  
  - 适合转录组表达量、代谢组、环境变量等多组学特征。

在内部，IASML 会将上述数据统一转换为数值矩阵 \(X \in \mathbb{R}^{n \times p}\)，其中 \(n\) 为个体数，\(p\) 为特征（标记）数。

#### 1.2 表型数据（`--phe`）

- 表型文件为 TXT 文本，**第一行为性状名称**，**第一列为个体 ID**。  
- 通过参数 `--phe-pos` 指定需要预测的性状列号（从 1 开始）。  
- IASML 会根据个体 ID 将表型与基因型/特征矩阵按行对齐，仅保留交集个体。

设表型向量为 \(y \in \mathbb{R}^n\)。

#### 1.3 协变量（`--f` 与 `--n`）

IASML 支持两类协变量：

- **因子型协变量（`--f`）**：如测区、品种、性别等分类变量。  
- **数值型协变量（`--n`）**：如环境指标、植株基础性状等连续变量。  

在建模时，这些协变量会与主特征矩阵一起进入模型，相当于在 \(X\) 中追加若干列（因子变量会自动展开为虚拟变量）。

---

### 2. 模型家族与算法原理

IASML 集成了多类经典机器学习模型和神经网络模型，通过统一接口进行调用。

#### 2.1 线性与正则化模型

- **线性回归（`linear`）**  
  \[
  y = X\beta + \varepsilon
  \]
  通过最小二乘估计参数 \(\beta\)，适用于特征数适中且共线性较弱的情形。

- **岭回归（`ridge`）**  
  在最小二乘损失上加入 \(L_2\) 正则：
  \[
  \min_{\beta} \|y - X\beta\|_2^2 + \lambda \|\beta\|_2^2
  \]
  通过惩罚参数大小减轻多重共线性，常用于高维基因组预测。

- **Lasso（`lasso`）**  
  使用 \(L_1\) 正则以获得稀疏解：
  \[
  \min_{\beta} \|y - X\beta\|_2^2 + \lambda \|\beta\|_1
  \]
  能够同时进行特征选择和参数估计。

- **Elastic Net（`elasticnet`）**  
  结合 \(L_1\) 与 \(L_2\) 正则：
  \[
  \min_{\beta} \|y - X\beta\|_2^2 + \lambda_1 \|\beta\|_1 + \lambda_2 \|\beta\|_2^2
  \]
  在特征高度相关时表现更稳健。

#### 2.2 树模型与集成方法

- **决策树（`decision_tree`）**  
  基于特征划分空间，构建一棵树形结构，易于解释但单棵树易过拟合。

- **随机森林（`random_forest`）**  
  通过对样本和特征进行随机采样，训练多棵决策树，并对预测结果取平均（回归）或投票（分类），能有效降低方差、提高稳定性。

- **梯度提升树（`gbm`）**  
  迭代拟合前一轮残差，每次训练一棵弱学习器（通常为浅树），逐步提升整体拟合能力。

- **LightGBM（`lightgbm`）与 XGBoost（`xgboost`）**  
  高效的梯度提升框架，支持大规模特征与样本，提供多种正则化与剪枝策略，广泛用于竞赛与生产环境。

#### 2.3 潜变量与边缘方法

- **偏最小二乘回归（`pls`）**  
  通过构造少数潜变量，将特征矩阵 \(X\) 与表型 \(y\) 之间的共同变化提取出来，在高维小样本场景中运行稳定。

- **支持向量机（`svm`）**  
  通过核函数将输入映射到高维空间，在该空间中求解最大间隔的超平面，适用于非线性关系建模。

#### 2.4 神经网络模型（Keras）

- **全连接神经网络（`mlp`）**  
  将输入特征经过多层非线性变换，实现复杂的非线性拟合。  
  - 支持自定义网络结构、激活函数、正则化与优化算法。  

- **卷积神经网络（`cnn`）**  
  适合具有序列或局部结构的特征（如按基因组位置排序的标记），通过卷积层提取局部模式和空间相关信息。

在 IASML 中，神经网络模型可以通过预定义结构直接训练，也可以通过上传已有 Keras 模型（`--model-frame`）用于预测。

---

### 3. 个体相似度降维（DR）

在基因型标记数远大于样本数（\(p \gg n\)）时，直接在高维空间建模容易出现过拟合与计算负担。IASML 提供了基于**个体相似度矩阵**的降维方法（`--DR`），将个体表示到更低维的嵌入空间中。

#### 3.1 思路概述

1. 根据选定的相似度 / 距离度量，对任意两个个体 \(i, j\) 计算相似度 \(s_{ij}\)。  
2. 得到一个 \(n \times n\) 的相似度（或距离）矩阵。  
3. 对该矩阵进行特征分解或相关分解，提取前若干主成分作为新的表示（类似 PCA on similarity）。  
4. 使用这些低维表示作为模型输入，从而在保留大部分信息的前提下降低维度。

#### 3.2 支持的 DR 度量

`--DR` 参数支持多种度量，例如：

- `euclidean`：欧氏距离。  
- `cosine`：余弦相似度。  
- `hamming`：汉明距离，常用于离散基因型编码。  
- `manhattan`：曼哈顿距离。  
- `pearson`：皮尔逊相关系数。  
- `van_raden`：经典 GRM 计算方法之一。  
- `yang_grm`：Yang 等提出的基因组关系矩阵计算方法。  
- `kl_divergence`：基于分布差异的 KL 散度近似。

也可以使用 `auto`，让 IASML 自动在若干候选 DR 方法中搜索效果较好的方案。

---

### 4. 集成策略：gather

IASML 提供一个名为 **gather** 的模型集成策略（`--gather`），用于在多种基础模型之间进行自动选择与集成。

- 当开启 `--gather` 时，用户可以指定一个模型集合（如 `ridge,lasso,random_forest,xgboost`），也可以使用 `all` 表示所有支持的经典模型。  
- IASML 会对每个候选模型分别进行训练与交叉验证，记录预测性能（例如 Pearson 相关、均方误差等）。  
- 根据设定的策略，可以选择：
  - 性能最优的单一模型作为最终模型；或  
  - 对多模型的预测结果加权平均（简单加权或基于性能加权），得到集成预测值。

通过 gather，用户无需手动尝试多个模型，即可快速获得一套表现较优的集成方案。

---

### 5. 内部与外部验证

IASML 支持两级验证机制，以确保预测结果的可靠性。

#### 5.1 内部验证（交叉验证）

在训练数据内部，IASML 可以采用 K 折交叉验证对模型性能进行评估：  

1. 将样本划分为 K 份（folds）；  
2. 轮流以 K-1 份作为训练集，剩余 1 份作为验证集；  
3. 对每一折计算 Pearson 相关系数、均方误差等指标；  
4. 汇总得到整体平均性能。  

内部验证主要用于模型选择与超参数调优，是 gather 策略的重要依据。

#### 5.2 外部验证（`--Val`）

对于独立于训练集的外部验证集，IASML 提供了 `--Val` 选项：

- `--Val`：外部验证集的表型文件路径；  
- `--Val-pos`：在验证集文件中对应目标性状的列号（应与训练集 `--phe-pos` 所指性状一致）。  

IASML 会使用在训练集上拟合好的模型，对验证集个体进行预测，并计算：

- **Pearson 相关系数** \(r\)：  
  \[
  r = \mathrm{corr}(y_{\text{Val}}, \hat{y}_{\text{Val}})
  \]
  反映预测值与真实表型的一致性。  
- 以及其他误差指标（如均方误差等）。

外部验证能更真实地反映模型在独立群体上的推广能力，适合科研论文中报告。

---

### 6. 整体工作流程（命令行与 Web 平台）

#### 6.1 命令行核心步骤

1. **准备数据**：  
   - 基因型：PLINK `.bed/.bim/.fam` 或 TXT 特征矩阵；  
   - 表型：TXT 文件，第一行为性状名，第一列为个体 ID；  
   - 可选：外部验证集表型文件。  

2. **构建命令**（示意）：  
   ```bash
   python IASML.py \
     --bfile data/genotype_prefix \
     --phe data/phenotype.txt \
     --phe-pos 2 \
     --model ridge \
     --DR auto \
     --out result
   ```

3. **运行与输出**：  
   - 预测结果：`result_predict.txt`  
   - 模型参数或模型文件：`result_model.txt` / `result_model.keras`  
   - 日志信息：`IASML.log` 等。

#### 6.2 Web 平台核心步骤

在 IASML Web 平台（本项目的 `app.py`）中，上述流程被图形化为：

1. 在“在线使用（Online usage）”页面上传基因型与表型文件；  
2. 选择目标性状列以及协变量；  
3. 选择模型类型：  
   - 预置模型（自动搜索参数）；  
   - 上传超参数文件；  
   - 上传已有 Keras 模型；  
4. 按需开启 DR 降维和外部验证 Val；  
5. 点击“开始计算”，在日志窗口查看 IASML 的运行进度；  
6. 计算完成后，一键下载预测结果与模型文件。

---

### 7. 结果解读与应用场景

- **育种材料选择**：  
  使用预测的育种值或表型值，筛选在目标性状上表现优良的材料。  

- **多环境 / 多组学联合分析**：  
  通过增加数值型协变量或 TXT 特征矩阵，将环境指标、转录组、代谢组等信息整合进统一模型。  

- **方法比较与论文发表**：  
  通过内部交叉验证与外部验证集 Pearson 相关等指标，在同一平台上公平比较多种算法，便于在论文中报告结果。

---

如果你在使用 IASML 的过程中有新的模型需求或特殊场景（例如多性状联合建模、贝叶斯方法等），可以在此基础上扩展命令行接口或前端选项，本平台预留了较为灵活的扩展空间。

