1

来自此资源的 Python t-sne 实现:https ://lvdmaaten.github.io/tsne/

顺便说一句,我是 scRNA-seq 的初学者。

我正在尝试做的事情:使用 scRNA-seq 数据集并在其上运行 t-SNE,但使用先前计算的 PCA(我有 PCA.score 和 PCA.load 文件)

Q1:我应该可以在 tSNE 中使用我选择的计算 PCA,但是在运行 Y = tsne.tsne(X) 时我应该使用哪个文件 pca.score 或 pca.load?

Q2:我尝试删除/替换部分 PCA 计算代码以尝试删除 PCA 预处理,但它似乎总是出错。我应该改变什么才能正确使用我已经有的 PCA 数据而不是再次从中计算 PCA?

PCA 处理代码的原始形式如下:

def pca(X=np.array([]), no_dims=50):
    """
        Runs PCA on the NxD array X in order to reduce its dimensionality to
        no_dims dimensions.
    """

    print("Preprocessing the data using PCA...")
    (n, d) = X.shape
    X = X - np.tile(np.mean(X, 0), (n, 1))
    (l, M) = X  #np.linalg.eig(np.dot(X.T, X))
    Y = np.dot(X, M[:, 0:no_dims])

    return Y
4

1 回答 1

1

您应该使用 PCA 分数。

至于不运行 pca,你可以把这一行注释掉:

X = pca(X, initial_dims).real

我所做的是添加一个参数do_pca并编辑函数,例如:

def tsne(X=np.array([]), no_dims=2, initial_dims=50, perplexity=30.0,do_pca=True):
    """
        Runs t-SNE on the dataset in the NxD array X to reduce its
        dimensionality to no_dims dimensions. The syntaxis of the function is
        `Y = tsne.tsne(X, no_dims, perplexity), where X is an NxD NumPy array.
    """

    # Check inputs
    if isinstance(no_dims, float):
        print("Error: array X should have type float.")
        return -1
    if round(no_dims) != no_dims:
        print("Error: number of dimensions should be an integer.")
        return -1

    # Initialize variables
    if do_pca:
        X = pca(X, initial_dims).real
    (n, d) = X.shape
    max_iter = 50
    [.. rest stays the same..]

使用示例数据集,不注释掉该行:

import numpy as np
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
import sys
import os
from tsne import *

X,y = load_digits(return_X_y=True,n_class=3)

如果我们运行默认值:

res = tsne(X=X,initial_dims=20,do_pca=True)
plt.scatter(res[:,0],res[:,1],c=y)

在此处输入图像描述

如果我们传递一个 pca :

pc = pca(X)[:,:20]
res = tsne(X=pc,initial_dims=20,do_pca=False)
plt.scatter(res[:,0],res[:,1],c=y)

在此处输入图像描述

于 2021-11-26T15:10:19.523 回答