基本概念

本节介绍 HABIT 的核心概念和术语,帮助您更好地理解和使用这个工具包。

生境(Habitat)

生境是指肿瘤内部具有相似生物学特征的区域。通过将肿瘤分割为多个生境,可以更好地理解肿瘤的异质性,这对于诊断、预后评估和治疗反应预测具有重要意义。

生境分析的核心思想:

  1. 肿瘤异质性: 肿瘤不是均匀的组织,而是由多个具有不同特征的亚区域组成

  2. 功能分区: 不同的生境可能对应不同的生物学过程(如血管生成、坏死、炎症等)

  3. 临床意义: 生境特征可以提供比整体肿瘤特征更丰富的诊断信息

生境分析流程:

生境分析工作流程

聚类策略

HABIT 提供三种聚类策略用于生境分割:

1. One-Step 策略

  • 描述: 对每个肿瘤独立进行体素到生境的聚类

  • 适用场景: 样本量较小,或者希望保留每个肿瘤的独特特征

  • 优点: 简单直接,每个肿瘤独立分析

  • 缺点: 可能难以发现跨患者的共同模式

2. Two-Step 策略(推荐)

  • 描述: 两步聚类 - 第一步:体素到超像素(个体级别) - 第二步:超像素到生境(群体级别)

  • 适用场景: 样本量较大,希望发现跨患者的共同生境模式

  • 优点: 可以发现跨患者的共同生境模式,提高泛化能力

  • 缺点: 计算复杂度较高

3. Direct Pooling 策略

  • 描述: 将所有体素池化后一次性聚类

  • 适用场景: 数据量较小,或者希望快速获得结果

  • 优点: 计算速度快,实现简单

  • 缺点: 可能忽略个体差异,数据泄露风险较高

策略选择建议:

  • 研究型项目: 推荐使用 Two-Step 策略

  • 快速原型: 可以使用 Direct Pooling 策略

  • 小样本研究: 可以考虑 One-Step 策略

Pipeline 机制

HABIT 继承了 scikit-learn 的 Pipeline 机制,这是避免数据泄露的关键设计。

什么是数据泄露?

数据泄露是指在模型训练过程中,测试集的信息意外地泄露到训练集中,导致模型性能被高估。

Pipeline 如何避免数据泄露?

  1. 训练阶段: 在训练集上训练 Pipeline,包括特征选择、聚类、模型训练等步骤

  2. 预测阶段: 加载训练好的 Pipeline,应用于测试集,确保使用相同的处理流程

  3. 严格分离: 训练集和测试集完全分离,避免测试集信息泄露

生境分析中的 Pipeline:

from habit.core.common.service_configurator import ServiceConfigurator
from habit.core.habitat_analysis.config_schemas import HabitatAnalysisConfig

# 加载配置
config = HabitatAnalysisConfig.from_file('./config_habitat.yaml')

# 创建配置器
configurator = ServiceConfigurator(config=config)

# 创建生境分析对象
habitat_analysis = configurator.create_habitat_analysis()

# 运行生境分析
habitat_analysis.run()

机器学习中的 Pipeline:

from sklearn.pipeline import Pipeline
from habit.core.machine_learning import ModelFactory

pipeline = Pipeline([
    ('feature_selection', feature_selector),
    ('model', ModelFactory.create_model('RandomForest', config))
])

# 训练阶段
pipeline.fit(X_train, y_train)

# 预测阶段
y_pred = pipeline.predict(X_test)

关键要点:

  • 训练和测试必须使用相同的 Pipeline

  • 不要在整个数据集上进行聚类或特征选择

  • 使用交叉验证时,每个 fold 的训练和测试必须严格分离

特征提取

HABIT 支持多种特征提取方法:

1. 体素级特征

  • 描述: 对每个体素提取特征

  • 适用场景: 需要精细的空间分析

  • 示例: 原始图像强度、纹理特征、局部熵等

2. 超像素级特征

  • 描述: 对超像素区域提取特征

  • 适用场景: 需要区域级别的分析

  • 示例: 平均强度、方差、形态学特征等

3. 生境级特征

  • 描述: 对每个生境提取特征

  • 适用场景: 研究生境的生物学特性

  • 示例: 生境大小、形状、强度分布等

4. 传统影像组学特征

  • 描述: 使用 pyradiomics 提取标准影像组学特征

  • 适用场景: 与传统影像组学研究对比

  • 示例: GLCM、GLRLM、GLSZM 等纹理特征

5. 非影像组学特征

  • 描述: 提取非标准的影像组学特征

  • 适用场景: 探索新的特征类型

  • 示例: MSI(Spatial Interaction Matrix,空间交互矩阵)、ITH(肿瘤内异质性)等

  • 参考: Intratumoral Spatial Heterogeneity at Perfusion MR Imaging Predicts Recurrence-free Survival in Locally Advanced Breast Cancer Treated with Neoadjuvant Chemotherapy

6. 整体生境特征

  • 描述: 提取整个生境的特征

  • 适用场景: 研究生境的整体特性

  • 示例: 生境数量、生境分布、生境间关系等

配置驱动

HABIT 使用 YAML 配置文件来控制所有参数,这是系统的核心设计理念。

配置文件的优势:

  1. 无需修改代码: 通过修改配置文件即可调整功能

  2. 版本控制: 配置文件可以纳入版本控制,便于追踪变更

  3. 可重复性: 相同的配置文件产生相同的结果

  4. 易于分享: 配置文件可以轻松分享给其他研究者

配置文件结构:

# 数据路径
data_dir: ./data.yaml
out_dir: ./results

# 核心配置
FeatureConstruction:
  voxel_level:
    method: concat(raw(T1), raw(T2), raw(FLAIR))

HabitatsSegmention:
  clustering_mode: two_step
  supervoxel:
    algorithm: kmeans
    n_clusters: 50

# 通用设置
processes: 2
random_state: 42

配置文件类型:

HABIT 有两种类型的配置文件:

  1. 数据配置文件: 指定图像和掩码的路径

  2. 功能配置文件: 指定处理流程的参数

参考 数据结构说明 了解更多关于数据配置文件的信息。

双重接口

HABIT 提供两种使用方式:CLI 和 Python API。

CLI 接口:

  • 适用场景: 批处理、自动化任务、快速原型

  • 优点: 简单易用,无需编写代码

  • 示例:

habit preprocess --config config_preprocessing.yaml
habitat get-habitat --config config_habitat.yaml --mode predict
habit extract --config config_extract_features.yaml
habitat model --config config_machine_learning.yaml --mode train

Python API 接口:

  • 适用场景: 集成到其他项目、定制化开发、复杂工作流

  • 优点: 灵活强大,可以深度定制

  • 示例:

from habit.core.preprocessing.image_processor_pipeline import BatchProcessor
from habit.core.common.service_configurator import ServiceConfigurator
from habit.core.habitat_analysis.config_schemas import HabitatAnalysisConfig
from habit.core.machine_learning import MLWorkflow

# 预处理
processor = BatchProcessor(config_path='config_preprocessing.yaml')
processor.process_batch()

# 生境分析
config = HabitatAnalysisConfig.from_file('config_habitat.yaml')
configurator = ServiceConfigurator(config=config)
habitat_analysis = configurator.create_habitat_analysis()
habitat_analysis.run()

# 机器学习
workflow = MLWorkflow(config)
workflow.run_pipeline()

选择建议:

  • 初学者: 从 CLI 开始,快速上手

  • 研究者: 根据需求选择,CLI 用于快速实验,API 用于定制开发

  • 开发者: 使用 Python API,集成到自己的项目中