【问题标题】:How to preserve row headers after PCA from sklearn如何在 sklearn 的 PCA 之后保留行标题
【发布时间】:2017-11-18 18:07:01
【问题描述】:

我有一个这样的数组:

sampleA 1 2 2 1 
sampleB 1 3 2 1
sampleC 2 3 1 2

我的目标是跨样本运行 PCA 并查看它们的聚类。但是,我需要在行标题中保留样本名称。有什么办法可以做到这一点?所需的 PCA 结果包括行标题:

sampleA 0.13 0.1
sampleB 0.1 0.4
sampleC 0.1 0.1

目前只运行这两条简单的线路:

my_pca = PCA(n_components=8)
trans = my_pca.fit_transform(in_array)

【问题讨论】:

  • 只是想知道如何使代码工作?你的数组的形状是(3, 4)。如果您将其与n_components=8 匹配,您应该会收到一条错误消息。如果我将它与n_components=2 匹配,我没有得到结果,sampleA 0.13 0.1,你已经提到了。我在这里错过了什么吗?
  • 对不起,我的实际数据是一个更大的数组,绝对不能轻易放入评论框:)
  • 没问题。只是我无法用你的代码重现你的结果,我害怕错过一些东西而变得愚蠢。

标签: python scikit-learn pca


【解决方案1】:

根据source,在进行PCA之前,您的输入将被np.array()转换。因此,即使您使用结构化数组或 pandas DataFrame,您也会在 PCA.fit_transform(X) 期间丢失行索引。但是,数据的顺序会被保留,这意味着您可以根据需要附加索引:

import io

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA

s = """sampleA 1 2 2 1
sampleB 1 3 2 1
sampleC 2 3 1 2"""
in_array = pd.read_table(io.StringIO(s), sep=' ', header=None, index_col=0)
my_pca = PCA(n_components=2)
trans = my_pca.fit_transform(in_array)
df = pd.DataFrame(trans, index=in_array.index)
print(df)
#                 0         1
# 0                          
# sampleA -0.773866 -0.422976
# sampleB -0.424531  0.514022
# sampleC  1.198397 -0.091046

【讨论】:

  • 谢谢,订单保存知识很有帮助
  • @Y。罗 是不是说应用PCA时不会删除记录?
猜你喜欢
  • 2021-08-04
  • 2018-09-10
  • 2018-09-13
  • 2021-05-28
  • 2018-03-11
  • 2016-02-04
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
相关资源
最近更新 更多