关于生信常用的PCA算法

PCA是一种常用的数据降维算法,主要就是根据特征值提出特征值较大的几个特征向量,并将高维向量投影到特征向量上以达到数据降维的目的。

第一步当然是处理数据,将样本数据按列放入numpy的数据框(比如100个样本,每个样本4个数据,就是4行100列,反过来也可以,不过要注意调换内积的顺序)。

数据需要先做归一化,以减去所有样本的均值来实现。

from sklearn.datasets import load_iris

iris = load_iris()
data = iris['data']
data = data-np.mean(data, axis=0)

然后要计算出协方差矩阵,并计算出特征值及特征向量

def get_eigen(data):
    data_cov = np.cov(data, rowvar=0)
    eigen_val, eigen_vec = np.linalg.eig(data_cov)
    return eigen_val, eigen_vec

然后对特征值排序,提出特征向量

def sort_eigen(eigen_val, eigen_vec, cut_num):
    index = np.argsort(-eigen_val)
    sort_vec = eigen_vec[:, index[:cut_num]]
    return sort_vec

最后计算样本投到这里的新值

result = np.dot(data, sort_vec)

成功将四维数据压缩至二维:
在这里插入图片描述
代码如下:

#!/usr/local/bin/python3
# -*- coding: UTF-8 -*-


from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt


def get_eigen(data):
    data_cov = np.cov(data, rowvar=0)
    eigen_val, eigen_vec = np.linalg.eig(data_cov)
    return eigen_val, eigen_vec


def sort_eigen(eigen_val, eigen_vec, cut_num):
    index = np.argsort(-eigen_val)
    sort_vec = eigen_vec[:, index[:cut_num]]
    return sort_vec


if __name__ == '__main__':
    iris = load_iris()
    data = iris['data']
    data = data - np.mean(data, axis=0)
    _val, _vec = get_eigen(data)
    _vec = sort_eigen(_val, _vec, 2)
    result = np.dot(data, _vec)
    print(result)

    colors = ["r", "b", "g"]
    labels = list(set(iris['target']))
    for idx, label in enumerate(labels):
        plt.scatter(result[iris['target'] == label][:, 0], result[iris['target'] == label][:, 1], c=colors[idx],
                    label=iris['target_names'][idx])

    plt.legend(loc='upper right')
    plt.show()

在sklearn中也有封装pca方法,可以直接调用,以下方式会更简单

# -*- coding: utf-8 -*-

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

iris = load_iris()
pca = PCA(n_components=2)
datas = pca.fit_transform(iris['data'])

labels = list(set(iris['target']))
colors = ["r", "b", "g"]


plt.figure(figsize=(16, 10))

for idx, label in enumerate(labels):
    plt.scatter(datas[iris['target']==label][:, 0], datas[iris['target']==label][:, 1], c=colors[idx], label=iris['target_names'][idx])

plt.legend(loc='upper right')
plt.savefig("iris.png")
<think>好的,用户想了解息学中的主成分分析(PCA)的方法与应用。首先,我需要回忆PCA的基本原理,然后结合息学的具体应用场景。根据提供的引用资料,PCA在基因组学、细胞学等领域有广泛应用,但要注意其局限性,比如非线性数据可能不适用。 用户可能想知道如何在息学中实施PCA,包括步骤和注意事项。需要分步骤解释:数据预处理、协方差矩阵计算、特征分解、主成分选择、结果解释。同时,要提到息学的具体例子,比如基因表达数据分析或种群遗传结构分析,这样用户能更直观理解。 还要注意用户提到的引用内容,特别是引用3和4,强调数据集成中的高效方法以及PCA的适用场景。可能需要提到使用软件如SPSS简化流程,但真正理解需要代码实现,不过用户可能更关注实际应用而非代码细节。 另外,用户可能关心PCA息学中的实际案例,比如降维后可视化样本间关系,或者去除批次效应。需要指出这些应用场景,并引用相关文献支持。 最后,考虑用户可能的问题,比如如何处理高维数据、与其他降维方法比较、结果解释的挑战等,确保回答全面且引导用户进一步思考。需要确保回答结构清晰,分点明确,引用正确,并自然融入参考资料中的息。</think>### 息学中的主成分分析(PCA)方法与应用 #### 一、PCA的核心原理 主成分分析(PCA)是一种线性降维方法,通过正交变换将原始高维数据映射到低维空间,保留最大方差的方向作为主成分。数学上,PCA通过计算协方差矩阵的特征值和特征向量,选择前$k$个最大特征值对应的特征向量作为主成分[^1]。 #### 二、息学中的实施步骤 1. **数据预处理** - 标准化处理:基因表达数据通常需进行标准化(如$z$-score标准化),消除量纲差异[^2] - 缺失值处理:通过均值填补或插值方法解决基因测序数据中的缺失值问题 2. **协方差矩阵与特征分解** 对标准化后的数据矩阵$X$计算协方差矩阵$C = \frac{1}{n-1}X^TX$,并通过特征值分解获取主成分方向: $$ C = V\Lambda V^T $$ 其中$\Lambda$为特征值对角矩阵,$V$为特征向量矩阵 3. **主成分选择** 根据累计贡献率(如$\sum_{i=1}^k \lambda_i / \sum \lambda_i \geq 85\%$)确定保留主成分数量 #### 三、典型应用场景 1. **基因表达数据分析** - 可视化样本聚类:通过前2-3个主成分绘制散点图,识别癌症亚型或实验批次效应 - 案例:TCGA数据库中乳腺癌样本的分子分型分析[^3] 2. **种群遗传结构解析** - 利用SNP数据主成分分析欧亚人群迁徙历史 - 示例:千人基因组计划中群体遗传距离的可视化 3. **多组学数据整合** - 整合转录组、蛋白质组数据时进行维度压缩 - 注意:需先对异构数据进行联合标准化处理[^4] #### 四、注意事项与优化策略 1. **非线性关系处理** 当基因互作存在非线性特征时,可结合核PCA(Kernel PCA)或t-SNE方法 2. **高维小样本问题** 针对单细胞测序等高维数据($p \gg n$),建议采用稀疏PCA(SPCA)增强解释性 3. **结果验证方法** - 通过置换检验评估主成分显著性 - 结合聚类稳定性分析(如轮廓系数) #### 五、与其他技术的对比 | 方法 | 适用场景 | 息学案例 | |------------|-------------------------|------------------------------| | PCA | 线性关系/全局结构 | 基因表达谱降维 | | t-SNE | 局部结构/可视化 | 单细胞转录组可视化 | | UMAP | 保留拓扑结构 | 多组学数据整合 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值