MultiModal Machine Learning 笔记_No.0 课程介绍

本课程聚焦多模态机器学习核心挑战,包括多模态表征学习、模态对齐与融合等。通过介绍关键数学概念及最新研究进展,如多模态自编码器与循环神经网络等,探讨其在情感识别、图像描述生成等领域的应用。

课程简介:

Multimodal machine learning (MMML) is a vibrant multi-disciplinary research field which addresses some of the original goals of artificial intelligence by integrating and modeling multiple communicative modalities, including linguistic, acoustic, and visual messages. With the initial research on audio-visual speech recognition and more recently with language & vision projects such as image and video captioning, this research field brings some unique challenges for multimodal researchers given the heterogeneity of the data and the contingency often found between modalities. This course will teach fundamental mathematical concepts related to MMML including multimodal alignment and fusion, heterogeneous representation learning and multistream temporal modeling. We will also review recent papers describing state-of-the-art probabilistic models and computational algorithms for MMML and discuss the current and upcoming challenges.

The course will present the fundamental mathematical concepts in machine learning and deep learning relevant to the five main challenges in multimodal machine learning: (1) multimodal representation learning, (2) translation & mapping, (3) modality alignment, (4) multimodal fusion and (5) co-learning. These include, but not limited to, multimodal auto-encoder, deep canonical correlation analysis, multi-kernel learning, attention models and multimodal recurrent neural networks. The course will also discuss many of the recent applications of MMML including multimodal affect recognition, image and video captioning and cross-modal multimedia retrieval.

课程主页:https://cmu-multicomp-lab.github.io/mmml-course/fall2020/

课程视频与PPT:11-777 MMML | Schedule

<think>我们需要将多个文件合并成一个多模态数据集。这些文件包含不同方面的患者信息:元信息、基因突变、拷贝数变异、mRNA表达、血细胞计数和临床结果。 步骤: 1. 理解每个文件的内容和结构。 2. 确定一个共同的患者标识符(例如患者ID)来合并这些文件。 3. 根据标识符将多个数据表连接起来。 假设每个文件都有一个患者ID列(可能列名不同,需要统一),我们以患者ID为键进行合并。 文件列表: - patients_metainfo.csv:患者元信息(如年龄、性别等) - patients_mutation.csv:基因突变数据(每个患者多个基因的突变状态) - patients_cna.csv:拷贝数变异数据(每个患者多个基因的拷贝数变化) - patients_mrna_zcores.txt:mRNA表达数据(可能是基因表达矩阵,行是患者,列是基因,值可能是Z-score) - patients_blood_cell.csv:血细胞计数数据(每个患者的血细胞相关指标) - patients_outcomes.csv:临床结果(如生存时间、事件发生等) 合并策略: 由于每个文件可能包含多个行对应同一个患者(例如,突变数据可能每个基因一行),我们需要将每个患者的信息整理成一行(即一个患者一条记录),然后再合并。 处理思路: 1. 对于元信息、血细胞计数、临床结果:这些数据通常每个患者只有一行,可以直接读取并合并。 2. 对于基因突变、拷贝数变异:这些数据可能是长格式(long format),每个患者有多行(每个基因一行),我们需要将其转换为宽格式(wide format),即每个患者一行,每个基因一列。 3. 对于mRNA表达数据:如果已经是宽格式(每行一个患者,每列一个基因),则可以直接使用。 步骤详解: 第一步:读取每个文件,并查看数据结构,确保患者ID列名一致或进行重命名。 第二步:将突变数据和拷贝数数据从长格式转为宽格式(使用pivot或类似方法)。 第三步:将所有数据表按照患者ID进行合并(左连接、外连接等,根据需求选择。通常我们可能希望保留所有有临床结果的患者)。 注意:合并时要注意患者ID的匹配,以及确保没有重复的患者ID(除了在长格式的数据中)。 我们使用Python的pandas库来完成这个任务。 代码示例: 步骤1:导入pandas 步骤2:逐个读取文件 步骤3:预处理每个数据表,确保有一个共同的列(如'patient_id')作为键,并将长格式数据转换为宽格式。 步骤4:逐步合并这些表格。 具体操作: 1. patients_metainfo.csv: 假设有列['patient_id', 'age', 'gender', ...] 2. patients_mutation.csv: 假设有列['patient_id', 'gene', 'mutation_status'] -> 需要转换为宽格式:每个gene作为一列,值为mutation_status。 注意:可能有多个突变,我们可以用0/1表示突变与否,或者保留具体的状态。这里假设我们只关心是否存在突变,那么可以设置为1(突变)和0(无突变)。 3. patients_cna.csv: 类似突变数据,可能有['patient_id', 'gene', 'cna_value'] -> 转为宽格式,每个gene一列,值为cna_value。 4. patients_mrna_zcores.txt: 如果是宽格式,行名为患者ID,列名为基因名,那么读取后需要重置索引(将患者ID变成一列)。 5. patients_blood_cell.csv: 可能有['patient_id', 'blood_cell_type', 'count'] -> 需要转换为宽格式(每个血细胞类型一列)?或者已经是宽格式(每个患者一行,多个血细胞指标)?假设已经是宽格式,每个患者一行。 6. patients_outcomes.csv: 每个患者一行,如['patient_id', 'survival_time', 'event_occurred']。 因此,我们主要需要转换的是突变、拷贝数和血细胞计数(如果血细胞不是宽格式,也需要转换)。但注意,血细胞数据可能已经是宽格式(每列代表一种血细胞计数),所以先检查。 代码实现: 我们将逐步读取每个文件,然后进行转换和合并。 </think>要将多个患者数据文件合并为多模态数据集,关键是通过**患者ID**进行表连接,同时处理不同类型数据的结构差异。以下是Python实现方案: ```python import pandas as pd import numpy as np # 1. 加载基础数据 meta = pd.read_csv('patients_metainfo.csv') # 元数据 outcomes = pd.read_csv('patients_outcomes.csv') # 临床结局 blood = pd.read_csv('patients_blood_cell.csv') # 血细胞数据 # 2. 处理基因突变数据 (长格式 → 宽格式) mutation = pd.read_csv('patients_mutation.csv') mutation_pivot = mutation.pivot_table( index='patient_id', columns='gene', values='mutation_status', aggfunc='first' # 取首次出现的突变状态 ).add_prefix('mut_') # 3. 处理拷贝数变异 (CNA) cna = pd.read_csv('patients_cna.csv') cna_pivot = cna.pivot( index='patient_id', columns='gene', values='cna_value' ).add_prefix('cna_') # 4. 处理mRNA表达数据 (矩阵格式) mrna = pd.read_csv('patients_mrna_zcores.txt', sep='\t') mrna = mrna.rename(columns={'Unnamed: 0': 'patient_id'}) # 假设首列是患者ID # 5. 多级合并 (从左到右优先级递增) merged = meta.merge( outcomes, on='patient_id', how='left' ).merge( blood, on='patient_id', how='left' ).merge( mutation_pivot, on='patient_id', how='left' ).merge( cna_pivot, on='patient_id', how='left' ).merge( mrna, on='patient_id', how='left' ) # 6. 缺失值处理 merged.fillna({'mutation_status': 'WT', 'cna_value': 0}, inplace=True) mrna_cols = [c for c in merged.columns if c.startswith('ENSG')] merged[mrna_cols] = merged[mrna_cols].fillna(0) print(f"最终数据集形状: {merged.shape}") merged.to_csv('multimodal_patient_data.csv', index=False) ``` ### 关键步骤解释: 1. **数据结构转换**: - **突变/CNA数据**:从长格式(`patient_id, gene, value`)转换为宽格式(每个基因单独列) - **mRNA数据**:矩阵格式需确保首列为患者ID 2. **合并优先级**: ```mermaid graph LR A[元数据] --> B[临床结局] B --> C[血细胞数据] C --> D[基因突变] D --> E[拷贝数变异] E --> F[mRNA表达] ``` - 使用左连接(`how='left'`)保留所有基础患者 - 按临床重要性由低到高合并 3. **缺失值处理**: - 突变数据:缺失标记为野生型(WT) - CNA/mRNA:数值型缺失补0 - 分类变量:保留NaN或单独分类 4. **列命名规范**: - 突变列前缀 `mut_` - CNA列前缀 `cna_` - mRNA列保留基因ID(如ENSG...) ### 注意事项: - **内存管理**:基因数据列极多,建议使用`dtype={'gene': 'category'}`节省内存 - **基因ID映射**:若不同文件基因标识不一致,需先进行ID转换 - **时间序列对齐**:如有多时间点数据,需增加采样时间列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值