【问题标题】:Why do we need to pass the transpose of a data into sklearn StandardScaler()?为什么我们需要将数据的转置传递给 sklearn StandardScaler()?
【发布时间】:2021-10-09 04:35:42
【问题描述】:

我有一组数据,每一行代表一个基因,每一列代表一个样本。

我想先对其进行规范化,然后对其执行 PCA。我上网google了一下,发现我们需要将数据帧的转置传递到sklearn.preprocessing.StandardScaler()函数中。

这是我现在的代码:

scale_df = sklearn.preprocessing.StandardScaler().fit_transform(df.iloc[:, 1:col].T)

pca = sklearn.decomposition.PCA()
pca_data = pca.fit_transform(scale_df.T)

这是我不确定的部分。首先,为什么我们需要将数据的转置传递给 StandardScaler()?其次,我们将数据的转置传入其中后,我们得到的缩放后的数据帧仍然是转置的,这会不会影响我们的PCA结果?我们是否应该在将其传递给 PCA 之前将其转回正常状态?

【问题讨论】:

    标签: python machine-learning scikit-learn normalization pca


    【解决方案1】:

    scikit-learn 库遵循一个惯例,行代表观察单位(人、产品、国家等),列代表不同的特征(身高、体重、金钱等)。由于您的数据在每一列中都有一个样本(我认为这是观察单位),因此您需要转置数据以采用约定。

    您不需要转置反向缩放的数据,因为 StandardScalar 和 PCA(以及大多数 scikit-learn 类)都遵循相同的约定(以行为单位)。

    【讨论】:

    • 您好,感谢您的评论!我很困惑,我对生物医学领域不太熟悉。我想问一下,在我的数据集中,基因是观察单位还是特征?
    • 这取决于您的研究设计。我猜基因代表了这里的特征,因为另一个维度(列)是样本。我的猜想是每个样本都有很多基因信息,你想用 PCA 压缩它们。
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 2022-01-23
    • 2011-03-14
    • 2019-01-29
    • 1970-01-01
    • 2021-06-22
    • 2021-06-07
    • 2016-03-20
    相关资源
    最近更新 更多