如何在sklearn之后保留PCA之后的行标题

时间:2017-06-16 05:02:47

标签: python scikit-learn pca

我有一个像这样的数组:

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)

1 个答案:

答案 0 :(得分:3)

根据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