利用 SNP 预测表型

利用 SNP 预测表型

[相关链接]

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

image

1. 什么是SNP

SNP(Single Nucleotide Polymorphism,单核苷酸多态性)是人类基因组中最常见的一种遗传变异形式,指的是在基因组水平上由单个核苷酸(A、T、C、G 四种碱基中的一种)的替换、插入或缺失引起的 DNA 序列差异,其中单个核苷酸的替换是最主要的类型(占比超 90%)。

一、SNP 的核心特征

  1. 普遍性:在人类基因组中,每 1000-3000 个碱基对中就存在 1 个 SNP,全基因组范围内约有 300 万 - 1 亿个 SNP 位点,覆盖了基因组的绝大多数区域(包括编码区、非编码区、启动子等)。
  2. 稳定性:与其他遗传变异(如短串联重复序列 STR)相比,SNP 的突变率极低(约 10⁻⁹/ 代),一旦形成便会稳定遗传给后代,是研究种群进化、亲缘关系的重要标记。
  3. 二态性:绝大多数 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. 特征提取与转换
    原始输入数据(如图像的像素值、文本的词向量)往往包含大量冗余信息或噪声,隐藏层的核心功能是通过非线性变换(如激活函数)对这些数据进行 “提纯” 和 “抽象”。
    • 例如,在图像识别网络中:
      • 浅层隐藏层可能提取边缘、纹理等基础特征;
      • 深层隐藏层则组合这些基础特征,形成更复杂的组件(如眼睛、鼻子),最终抽象为 “人脸” 等高级特征。
  2. 学习非线性关系
    现实世界中的问题(如图像分类、语言翻译)大多具有非线性特征,而仅靠输入层到输出层的直接连接(类似线性模型)无法捕捉这些复杂关系。隐藏层通过多层叠加的非线性变换,使神经网络能够拟合高度复杂的函数关系。
    • 例如,判断 “一张图片是否包含猫”,需要综合颜色、形状、纹理等多维度的非线性关联,这依赖于隐藏层的逐层特征组合。
  3. 增强模型表达能力
    隐藏层的数量(深度)和每层神经元的数量(宽度)直接影响神经网络的 “容量”—— 即模型拟合数据模式的能力。
    • 增加隐藏层或神经元数量,理论上能让模型学习更精细的规律(但需避免过拟合);
    • 反之,隐藏层过浅或神经元过少,可能导致模型 “欠拟合”(无法捕捉关键特征)。
  4. 实现端到端学习
    在传统机器学习中,特征工程(手动设计特征)是关键步骤,而隐藏层的存在使神经网络能够自动完成特征提取,无需人工干预。例如,语音识别网络直接输入原始音频信号,通过隐藏层自动转化为 “音素”“单词” 等特征,最终输出文字结果,实现从输入到输出的 “端到端” 学习。

隐藏层的工作原理简化

以一个简单的三层神经网络(输入层→1 个隐藏层→输出层)为例:

  1. 输入层接收原始数据(如手写数字图像的像素值);
  2. 隐藏层的每个神经元通过权重(可学习的参数)对输入数据进行加权求和,并通过激活函数(如 ReLU)引入非线性,输出 “加工后的特征”;
  3. 输出层基于隐藏层的特征,最终输出预测结果(如识别出的数字 “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 序列的局部关联特征

  1. 捕捉邻近 SNP 的协同效应
    SNP 在基因组上呈线性排列,相邻 SNP 可能存在联动效应(如连锁不平衡 LD)。卷积核(如 1×k 大小)可扫描连续的 k 个 SNP 位点,学习其组合模式(如同一位点的不同等位基因组合与疾病的关联)。
  2. 降维与特征选择
    全基因组 SNP 数据维度极高(可达百万级),卷积层通过局部连接和权值共享,自动筛选与表型相关的关键 SNP 组合,大幅降低后续 MLP 层的输入维度。
  3. 增强模型对噪声的鲁棒性
    基因组数据中存在大量无关 SNP(噪声),卷积层通过滑动窗口提取局部特征,可过滤随机噪声,聚焦于具有生物学意义的 SNP 模式(如基因启动子区域的 SNP 集群)。
  4. 为后续 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?

  1. 节省存储空间:列式存储 + 高效压缩,大幅减少磁盘占用(尤其对重复值多的列,如分类变量)。
  2. 加速数据处理:分析时只需加载所需列,减少 I/O 操作和内存占用(例如,计算 “年龄” 列的平均值,Parquet 仅读取 “年龄” 列,而 CSV 需读取所有列)。
  3. 支持复杂数据:原生支持嵌套结构(如 JSON 式的多层数据),无需像 CSV 那样拆分为扁平表。
  4. 适合大数据场景:与分布式计算框架(Spark、Flink)无缝集成,是数据湖、数据仓库的常用格式。

为什么仍需使用 CSV?

  1. 简单直观:文本格式可直接用记事本打开编辑,适合人类阅读和小规模数据处理。
  2. 通用性强:几乎所有编程语言和工具都支持 CSV,是数据交换的 “通用语言”。
  3. 低门槛:无需考虑数据类型定义,适合快速导出 / 导入简单结构化数据(如表格数据)。

总结

  • Parquet 是 “高性能、高效率” 的选择,适合大规模数据存储和分析,尤其在大数据生态中占据主导地位。
  • CSV 是 “简单通用” 的选择,适合小规模数据交换和手动处理,但在大数据场景下效率较低。

实际应用中,常将 CSV 作为数据采集 / 交换的中间格式,导入系统后转换为 Parquet 进行长期存储和分析。

5. BatchNormld 是什么

image

在你给出的代码中,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 文件 分别是什么

image

image

从文件名和文件内容来看,df_snp.csvdf_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.csvdf_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文件写代码运行
posted @ 2025-09-23 10:03  Seryn  阅读(98)  评论(0)    收藏  举报