利用 SNP 预测表型
利用 SNP 预测表型
[相关链接]
- https://blog.csdn.net/u011734144/article/details/80924207
- https://blog.csdn.net/IronmanJay/article/details/128689946
- 可视化库:https://blog.csdn.net/2401_87975790/article/details/148882342
- https://www.zhihu.com/question/1891794028531523988
- 详细内容见:https://gitee.com/sensenstudyhard/typora_md/blob/master/Reading&Question/4利用SNP预测表型.md

1. 什么是SNP
SNP(Single Nucleotide Polymorphism,单核苷酸多态性)是人类基因组中最常见的一种遗传变异形式,指的是在基因组水平上由单个核苷酸(A、T、C、G 四种碱基中的一种)的替换、插入或缺失引起的 DNA 序列差异,其中单个核苷酸的替换是最主要的类型(占比超 90%)。
一、SNP 的核心特征
- 普遍性:在人类基因组中,每 1000-3000 个碱基对中就存在 1 个 SNP,全基因组范围内约有 300 万 - 1 亿个 SNP 位点,覆盖了基因组的绝大多数区域(包括编码区、非编码区、启动子等)。
- 稳定性:与其他遗传变异(如短串联重复序列 STR)相比,SNP 的突变率极低(约 10⁻⁹/ 代),一旦形成便会稳定遗传给后代,是研究种群进化、亲缘关系的重要标记。
- 二态性:绝大多数 SNP 只有两种等位基因(例如 A/T 或 C/G),这种 “二态性” 使其检测和分析更简便,适合大规模批量研究(如全基因组关联分析 GWAS)。
二、SNP 的分类(按基因组位置)
不同位置的 SNP 对基因功能和表型的影响差异极大,主要可分为以下几类:
| 分类 | 位置 | 对基因 / 表型的影响 | 示例 |
|---|---|---|---|
| 编码区 SNP | 基因的外显子区域 | 可能改变氨基酸序列(错义突变),或不改变氨基酸(同义突变,因密码子简并性),少数导致终止密码子(无义突变) | - 错义突变:SNP 使 “GAG”(谷氨酸)变为 “GTG”(缬氨酸),导致镰状细胞贫血; - 同义突变:“GCT” 和 “GCA” 均编码丙氨酸,无表型变化。 |
| 非编码区 SNP | 内含子、启动子、增强子等 | 可能影响基因转录(如启动子区 SNP 改变转录因子结合位点)、mRNA 剪切效率,间接影响基因表达量 | 某些 SNP 位于胰岛素基因的启动子区,降低胰岛素表达,增加 2 型糖尿病风险。 |
| 基因间区 SNP | 两个基因之间的区域 | 多数无明确功能,但部分可能参与调控邻近基因,或作为 “遗传标记” 关联特定性状 | 基因组中大量无功能的 SNP,常被用于亲子鉴定、种群溯源。 |
三、SNP 的主要研究与应用领域
SNP 的稳定性和普遍性使其成为遗传学研究的核心工具,广泛应用于以下领域:
1. 疾病关联研究(最核心应用)
通过全基因组关联分析(GWAS) ,对比患者与健康人群的 SNP 位点差异,定位与疾病相关的 “易感基因”。例如:
- 乳腺癌:发现 BRCA1/2 基因附近的 SNP 与乳腺癌风险显著相关;
- 高血压、糖尿病:鉴定出多个与这些复杂疾病(多基因控制)相关的 SNP 位点,为疾病风险预测提供依据。
2. 个性化医疗
根据个体的 SNP 特征,制定 “量身定制” 的医疗方案:
- 药物基因组学:部分 SNP 会影响药物的代谢效率(如 CYP450 基因家族的 SNP),例如携带特定 SNP 的人对降压药 “硝苯地平” 代谢更快,需调整剂量以避免药效不足;
- 疾病风险预测:通过检测多个疾病相关 SNP,计算个体患某病的风险(如肺癌、阿尔茨海默病),指导早期预防(如戒烟、定期筛查)。
3. 种群遗传学与进化研究
SNP 的稳定遗传特性可用于:
- 追溯人类起源与迁徙路线(如通过 Y 染色体或线粒体上的 SNP,确定不同人群的分化时间);
- 分析物种间的亲缘关系(如比较人类与黑猩猩基因组的 SNP 差异,研究进化距离)。
4. 法医学应用
- 亲子鉴定:选择多个高多态性的 SNP 位点(如 10-20 个),通过对比父母与子女的 SNP 分型,判断亲子关系(准确率超 99.99%);
- 个体识别:利用血液、毛发等样本中的 SNP,构建个体的 “遗传指纹”,辅助案件侦破。
5. 农业育种
在作物和畜禽育种中,通过筛选与 “优良性状”(如抗病虫害、高产、优质)相关的 SNP,快速培育新品种(即 “分子标记辅助育种”),缩短育种周期(如水稻抗稻瘟病品种的培育)。
四、SNP 与其他遗传变异的区别
为了更清晰理解 SNP,可将其与另外两种常见遗传变异对比:
| 特征 | SNP(单核苷酸多态性) | STR(短串联重复序列) | Indel(插入 / 缺失) |
|---|---|---|---|
| 变异单位 | 单个核苷酸(A/T/C/G) | 2-6 个核苷酸的重复单元(如 “ATAT”) | 1-50 个核苷酸的插入或缺失 |
| 突变率 | 低(~10⁻⁹/ 代) | 高(~10⁻³-10⁻⁴/ 代) | 中等 |
| 多态性 | 二态性(多数仅 2 种等位基因) | 多态性高(重复次数差异大) | 二态性或多态性 |
| 核心应用 | 疾病关联、个性化医疗、进化 | 亲子鉴定、个体识别(传统) | 疾病研究(如囊性纤维化)、进化 |
总结
SNP 作为基因组中最基础、最常见的遗传变异,不仅是解码人类遗传奥秘的 “钥匙”,更在疾病研究、个性化医疗、法医学、农业等领域发挥着不可替代的作用。随着基因测序技术(如高通量测序)的普及,SNP 的检测成本不断降低,其应用也将更广泛地融入临床和日常生活。
2. 隐藏层是什么,它的作用是什么
在神经网络中,隐藏层(Hidden Layer) 是位于输入层和输出层之间的神经元层,是神经网络实现复杂特征提取和数据处理的核心结构。它之所以被称为 “隐藏”,是因为这些层不直接与原始输入数据或最终输出结果交互,而是通过对输入信息的逐层加工,将原始数据转化为更抽象、更具代表性的特征,为输出层的决策提供支持。
隐藏层的核心作用
- 特征提取与转换
原始输入数据(如图像的像素值、文本的词向量)往往包含大量冗余信息或噪声,隐藏层的核心功能是通过非线性变换(如激活函数)对这些数据进行 “提纯” 和 “抽象”。- 例如,在图像识别网络中:
- 浅层隐藏层可能提取边缘、纹理等基础特征;
- 深层隐藏层则组合这些基础特征,形成更复杂的组件(如眼睛、鼻子),最终抽象为 “人脸” 等高级特征。
- 例如,在图像识别网络中:
- 学习非线性关系
现实世界中的问题(如图像分类、语言翻译)大多具有非线性特征,而仅靠输入层到输出层的直接连接(类似线性模型)无法捕捉这些复杂关系。隐藏层通过多层叠加的非线性变换,使神经网络能够拟合高度复杂的函数关系。- 例如,判断 “一张图片是否包含猫”,需要综合颜色、形状、纹理等多维度的非线性关联,这依赖于隐藏层的逐层特征组合。
- 增强模型表达能力
隐藏层的数量(深度)和每层神经元的数量(宽度)直接影响神经网络的 “容量”—— 即模型拟合数据模式的能力。- 增加隐藏层或神经元数量,理论上能让模型学习更精细的规律(但需避免过拟合);
- 反之,隐藏层过浅或神经元过少,可能导致模型 “欠拟合”(无法捕捉关键特征)。
- 实现端到端学习
在传统机器学习中,特征工程(手动设计特征)是关键步骤,而隐藏层的存在使神经网络能够自动完成特征提取,无需人工干预。例如,语音识别网络直接输入原始音频信号,通过隐藏层自动转化为 “音素”“单词” 等特征,最终输出文字结果,实现从输入到输出的 “端到端” 学习。
隐藏层的工作原理简化
以一个简单的三层神经网络(输入层→1 个隐藏层→输出层)为例:
- 输入层接收原始数据(如手写数字图像的像素值);
- 隐藏层的每个神经元通过权重(可学习的参数)对输入数据进行加权求和,并通过激活函数(如 ReLU)引入非线性,输出 “加工后的特征”;
- 输出层基于隐藏层的特征,最终输出预测结果(如识别出的数字 “5”)。
随着网络深度增加(如深度学习中的 CNN、RNN),多个隐藏层会形成 “层级特征提取”:低层处理简单特征,高层整合复杂特征,从而实现对复杂数据的精准建模。
总结
隐藏层是神经网络的 “核心处理器”,通过逐层的特征转换和非线性学习,使模型能够处理复杂任务。其设计(深度、宽度、激活函数等)是神经网络性能的关键,也是深度学习在图像、语言、语音等领域取得突破的核心原因之一。
3. 思考题:比较MLP和CNN的结构,参数量和训练效果;比较同一个模型不同学习率对训练效果的影响? SNP_CNN中就是卷积+MLP,前面的卷积有什么作用?
一、MLP 与 CNN 的结构、参数量和训练效果对比
1. 结构差异
- MLP(多层感知机)
由输入层、多个全连接隐藏层和输出层组成,每层神经元与下一层所有神经元完全连接(全连接)。- 特点:无空间感知能力,将输入数据视为一维向量(如将 28×28 图像展平为 784 维向量),忽略数据的空间 / 时序结构。
- CNN(卷积神经网络)
核心由卷积层、池化层、全连接层组成,通过局部连接和权值共享提取空间特征。- 特点:保留输入数据的二维 / 三维结构(如图像的宽 × 高 × 通道),通过卷积核(Filter)提取局部特征(如边缘、纹理),并通过层级结构组合成复杂特征。
2. 参数量对比
- MLP:参数量巨大,计算公式为 ∑(上一层神经元数 × 当前层神经元数 + 当前层偏置数)。
例如:输入为 28×28 图像(784 维),1 个隐藏层(1000 神经元)的 MLP 参数量为:
784×1000 + 1000 ≈ 78 万,若增加深度,参数量会呈指数级增长。 - CNN:参数量远小于 MLP,核心原因是权值共享和局部连接。
卷积层参数量仅与卷积核大小、数量和输入通道有关:
例如:3×3 卷积核(1 个)处理 3 通道图像,参数量为 3×3×3 + 1(偏置)= 28,即使增加到 64 个卷积核,也仅 64×28 = 1792 个参数。
整体参数量通常是 MLP 的几十分之一到几百分之一。
3. 训练效果对比
| 场景 | MLP 表现 | CNN 表现 |
|---|---|---|
| 图像 / 视频(含空间结构) | 效果差,易过拟合(参数量大),无法捕捉局部特征关联 | 效果优异,通过卷积天然适配空间特征,抗过拟合能力强 |
| 结构化数据(如表格) | 适合,可直接处理一维特征向量 | 不适合,需额外转换结构,效率低 |
| 小样本数据 | 易过拟合(参数量大) | 更稳健(参数量小,泛化能力强) |
| 计算效率 | 训练 / 推理速度慢(全连接计算密集) | 速度快(卷积操作可并行优化) |
二、同一模型不同学习率对训练效果的影响
学习率(Learning Rate)控制参数更新的步长,是影响训练的核心超参数:
- 学习率过大(如>0.1):
- 可能跳过损失函数的最小值(在最优值附近震荡),导致损失无法收敛;
- 极端情况会使参数更新幅度过大,导致损失发散(Loss 爆炸)。
- 学习率过小(如<1e-5):
- 训练速度极慢,需要更多迭代次数才能接近最优值;
- 可能陷入局部最小值(因步长太小无法跳出),或在鞍点停滞。
- 合适的学习率(如 0.001-0.01,需根据模型调整):
- 损失函数稳步下降,最终收敛到全局或接近全局最小值;
- 训练效率与收敛效果达到平衡。
总结:学习率需 “Goldilocks 原则”—— 既不过大也不过小,通常通过学习率调度策略(如衰减、余弦退火)动态调整。
三、SNP_CNN 中卷积层的作用
在处理 SNP(单核苷酸多态性)数据的 CNN 模型(SNP_CNN)中,卷积层的核心作用是提取 SNP 序列的局部关联特征:
- 捕捉邻近 SNP 的协同效应
SNP 在基因组上呈线性排列,相邻 SNP 可能存在联动效应(如连锁不平衡 LD)。卷积核(如 1×k 大小)可扫描连续的 k 个 SNP 位点,学习其组合模式(如同一位点的不同等位基因组合与疾病的关联)。 - 降维与特征选择
全基因组 SNP 数据维度极高(可达百万级),卷积层通过局部连接和权值共享,自动筛选与表型相关的关键 SNP 组合,大幅降低后续 MLP 层的输入维度。 - 增强模型对噪声的鲁棒性
基因组数据中存在大量无关 SNP(噪声),卷积层通过滑动窗口提取局部特征,可过滤随机噪声,聚焦于具有生物学意义的 SNP 模式(如基因启动子区域的 SNP 集群)。 - 为后续 MLP 提供抽象特征
卷积层输出的特征图(每个通道代表一种 SNP 模式)被展平后输入 MLP,MLP 则负责学习这些抽象特征与最终表型(如疾病风险、性状)的非线性关系,结合了 CNN 的局部特征提取能力和 MLP 的复杂模式拟合能力。
总结:SNP_CNN 中,卷积层是 “特征提取器”,负责从高维 SNP 序列中挖掘局部关联模式;MLP 是 “分类 / 回归器”,负责将这些模式映射到具体表型,二者结合实现对基因组数据的高效建模。
4. parqute 文件介绍,和csv格式的文件有什么区别
Parquet 文件介绍
Parquet 是一种列式存储的二进制文件格式,专为大数据处理设计,由 Apache 软件基金会开发,广泛用于 Hadoop 生态系统及现代数据处理框架(如 Spark、Pandas、Dask 等)。它的核心特点是高效压缩、低 I/O 开销和对复杂数据类型的原生支持,特别适合大规模数据存储和分析。
Parquet 与 CSV 的核心区别
| 对比维度 | Parquet | CSV(逗号分隔值) |
|---|---|---|
| 存储格式 | 二进制列式存储(按列存储数据) | 文本行式存储(按行存储数据,用逗号分隔字段) |
| 数据压缩 | 支持高效压缩(如 Snappy、Gzip、LZO 等),压缩率高(通常比 CSV 小 5-10 倍) | 无内置压缩,需额外工具(如 zip)压缩 |
| 数据类型 | 强类型,支持复杂类型(如嵌套结构、数组、Map 等),存储时保留类型信息 | 弱类型,所有数据均为字符串,需解析后确定类型 |
| 读取效率 | 可按需读取指定列(无需加载整个文件),适合列级分析(如求某列平均值) | 必须读取整个文件才能提取特定列,效率低 |
| 写入效率 | 写入时需按列组织数据,开销略高,但适合批量写入 | 写入简单(直接追加文本),适合小数据实时写入 |
| 元数据支持 | 内置元数据(如列名、类型、统计信息),便于查询优化 | 无元数据,需手动定义列信息 |
| 适用场景 | 大规模数据存储、数据分析、机器学习训练数据等 | 小规模数据交换、手动编辑、简单数据记录 |
| 兼容性 | 需支持 Parquet 的工具(如 Pandas、Spark)读取 | 几乎所有工具(Excel、Python、数据库等)都支持 |
为什么选择 Parquet?
- 节省存储空间:列式存储 + 高效压缩,大幅减少磁盘占用(尤其对重复值多的列,如分类变量)。
- 加速数据处理:分析时只需加载所需列,减少 I/O 操作和内存占用(例如,计算 “年龄” 列的平均值,Parquet 仅读取 “年龄” 列,而 CSV 需读取所有列)。
- 支持复杂数据:原生支持嵌套结构(如 JSON 式的多层数据),无需像 CSV 那样拆分为扁平表。
- 适合大数据场景:与分布式计算框架(Spark、Flink)无缝集成,是数据湖、数据仓库的常用格式。
为什么仍需使用 CSV?
- 简单直观:文本格式可直接用记事本打开编辑,适合人类阅读和小规模数据处理。
- 通用性强:几乎所有编程语言和工具都支持 CSV,是数据交换的 “通用语言”。
- 低门槛:无需考虑数据类型定义,适合快速导出 / 导入简单结构化数据(如表格数据)。
总结
- Parquet 是 “高性能、高效率” 的选择,适合大规模数据存储和分析,尤其在大数据生态中占据主导地位。
- CSV 是 “简单通用” 的选择,适合小规模数据交换和手动处理,但在大数据场景下效率较低。
实际应用中,常将 CSV 作为数据采集 / 交换的中间格式,导入系统后转换为 Parquet 进行长期存储和分析。
5. BatchNormld 是什么

在你给出的代码中,BatchNorm1d是 PyTorch 中的一个类,代表一维批量归一化(Batch Normalization)层,是深度学习中常用的一种归一化技术,主要用于加速神经网络的训练过程并提高模型的泛化能力 ,以下是关于它的详细介绍:
工作原理
对于一个小批量(mini-batch)的数据,BatchNorm1d对每个特征维度进行归一化操作。假设输入的小批量数据形状为 (batch_size, num_features, sequence_length)(在一维卷积场景下),它会在batch_size这个维度上计算每个num_features特征的均值和方差 ,然后使用以下公式对数据进行归一化:
x^(k)=Var[x(k)]+ϵx(k)−E[x(k)]
其中,x(k) 是第 k 个特征维度上的数据,E[x(k)] 是该特征维度在当前小批量数据上的均值,Var[x(k)] 是方差,ϵ 是一个很小的常数(在BatchNorm1d中,默认值为1e-5),用于防止分母为零。
在归一化之后,BatchNorm1d还会对归一化后的数据进行线性变换(缩放和平移):
y(k)=γ(k)x^(k)+β(k)
其中,γ(k) 和 β(k) 是可学习的参数,分别对应缩放因子和偏移因子,它们在训练过程中通过反向传播进行更新。
关键参数
在代码中BatchNorm1d(64, eps=1e-5, momentum=0.1, affine=True, track_running_stats=True) ,各个参数含义如下:
- num_features:即代码中的
64,表示输入数据的特征数量,也就是输入数据的第二个维度大小。在经过Conv1d等操作后,特征图的通道数就是这里的num_features。 - eps:添加到方差中的一个小常数,用于数值稳定性,防止分母为零,默认值是
1e-5。 - momentum:用于计算运行均值和运行方差的动量值,默认值是
0.1。在训练过程中,会不断更新运行均值和运行方差,这个参数决定了更新的速度 。 - affine:一个布尔值,表示是否启用可学习的仿射变换(即是否学习缩放因子γ和偏移因子β),如果设置为
True,则会学习这两个参数;如果设置为False,则γ=1且β=0,不进行可学习的线性变换,默认值是True。 - track_running_stats:一个布尔值,表示是否跟踪运行均值和运行方差。在训练时,会根据小批量数据不断更新这些统计量;在测试时,会使用这些运行统计量进行归一化。如果设置为
False,则在测试时会使用当前小批量数据的均值和方差,默认值是True。
作用
- 加速训练:通过归一化操作,使得每一层输入数据的分布更加稳定,缓解了梯度消失和梯度爆炸问题,从而允许使用更大的学习率,加快模型的收敛速度。
- 提高泛化能力:类似于一种正则化方法,
BatchNorm1d对每个小批量数据进行不同的归一化,引入了一定的噪声,使得模型对数据的分布变化更加鲁棒,减少过拟合的风险。 - 允许更灵活的网络设计:由于归一化使得数据分布更稳定,模型可以使用更大的权重初始化范围和更复杂的网络结构,而不用担心梯度问题。
6. df_snp 和 df_pheno 文件 分别是什么


从文件名和文件内容来看,df_snp.csv和df_pheno.csv应该是用于存储和遗传学相关数据的文件,以下是对它们的分析:
df_snp.csv 文件
- 文件内容:从截图中可以看到,第一行是列名,以 “snp_” 开头进行编号,如
snp_0,snp_1等,代表不同的单核苷酸多态性(SNP)位点;从第二行开始是具体的数据,数据主要由 0 和 1 组成。在遗传学中,SNP 位点通常有两种等位基因,这里的 0 和 1 很可能是对这两种等位基因的一种编码方式 ,比如 0 代表一种等位基因,1 代表另一种等位基因。 - 文件用途:该文件用于存储与 SNP 位点相关的数据,可能是从基因测序数据中提取出来的 SNP 信息。在后续的数据分析或者建模中,这些 SNP 数据可以作为特征变量,用于研究 SNP 与表型之间的关联, 比如通过构建机器学习模型(如前面提到的 SNP_CNN 模型 ),探究哪些 SNP 位点与特定的表型相关,从而帮助理解遗传学机制,进行疾病风险预测、品种改良等相关研究。
df_pheno.csv 文件
- 文件内容:第一行是列名,包含
TKW,TW,GL,GW,GH,GP,SDS,PHT等,这些可能是代表不同表型(Phenotype)的缩写。从第二行开始是具体的数据,这些数据是数值型的。在遗传学研究中,表型是指生物体可以观察到的特征,比如植物的株高、产量相关指标,动物的体重、疾病状态等 ,这里的数值应该就是对应这些表型的测量值。 - 文件用途:该文件主要存储表型数据,在遗传学分析中,表型数据是研究的目标变量之一。结合
df_snp.csv文件中的 SNP 数据,可以进行关联分析,比如全基因组关联分析(GWAS),找出与特定表型显著相关的 SNP 位点,从而为基因定位、功能研究以及遗传育种等提供重要依据。
总的来说,df_snp.csv 和 df_pheno.csv 这两个文件是紧密相关的,前者提供遗传信息(SNP 位点),后者提供对应的表型信息,二者结合用于遗传学相关的数据分析和建模。
7. 使用Anaconda管理虚拟环境(VSCode)
基本语句
查看conda版本
>> conda -V
查看现有的虚拟环境
>> conda env list
创建新虚拟环境
>> conda create -n py36 python=3.6
删除某虚拟环境
>> conda remove --name py38 --all
激活某环境
>> conda activate py36
查看该环境中已有的库
>> conda list
8. 首次使用了Swanlab
- 注意一个 swanlab 项目只能对应一个ipynb文件
- 如果需要进行在一个项目中添加多个实验,需要在同一个ipynb文件写代码运行

浙公网安备 33010602011771号