我在查看 skbio
的 PCoA
方法的 attributes
(如下所示)。我对这个 API
不太熟悉,我想能够获取 eigenvectors
以及原始点投影到新轴上的坐标,类似于 sklearn.decomposition.PCA
中的 .fit_transform
,这样我就可以创建一些 PC_1 vs PC_2
风格的图表。我已经搞清楚了如何获取 eigvals
和 proportion_explained
,但 features
返回的是 None
。
这是因为它处于测试阶段吗?
如果有使用这个的教程,我将不胜感激。我是 scikit-learn
的超级粉丝,并且希望开始使用更多 scikit
的产品。
| Attributes | ---------- | short_method_name : str | 缩写后的排序方法名称。 | long_method_name : str | 排序方法名称。 | eigvals : pd.Series | 结果特征值。索引对应于排序轴标签。 | samples : pd.DataFrame | 样本在排序空间中的位置,由样本 ID 行索引。 | features : pd.DataFrame | 特征在排序空间中的位置,由特征 ID 行索引。 | biplot_scores : pd.DataFrame | 样本相对于特征的相关系数。 | sample_constraints : pd.DataFrame | 站点约束(约束变量的线性组合):在解释变量 X 空间中的站点坐标。这些是拟合的站点分数。 | proportion_explained : pd.Series | 在排序空间中每个维度解释的比例。索引对应于排序轴标签
这是我生成 主成分分析
对象的代码。
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.preprocessing import StandardScalerfrom sklearn import decompositionimport seaborn as sns; sns.set_style("whitegrid", {'axes.grid' : False})import skbiofrom scipy.spatial import distance%matplotlib inlinenp.random.seed(0)# Iris 数据集DF_data = pd.DataFrame(load_iris().data, index = ["iris_%d" % i for i in range(load_iris().data.shape[0])], columns = load_iris().feature_names)n,m = DF_data.shape# print(n,m)# 150 4Se_targets = pd.Series(load_iris().target, index = ["iris_%d" % i for i in range(load_iris().data.shape[0])], name = "Species")# 标准化,均值 = 0,方差 = 1DF_standard = pd.DataFrame(StandardScaler().fit_transform(DF_data), index = DF_data.index, columns = DF_data.columns)# 距离矩阵Ar_dist = distance.squareform(distance.pdist(DF_standard.T, metric="braycurtis")) # (m x m) 距离测量DM_dist = skbio.stats.distance.DistanceMatrix(Ar_dist, ids=DF_standard.columns)PCoA = skbio.stats.ordination.pcoa(DM_dist)
回答:
你可以通过 OrdinationResults.samples
访问转换后的样本坐标。这将返回一个由样本 ID 行索引的 pandas.DataFrame
(即距离矩阵中的 ID)。由于主坐标分析是对样本的距离矩阵进行操作,因此转换后的特征坐标(OrdinationResults.features
)不可用。scikit-bio 中接受样本 x 特征表作为输入的其他排序方法将具有转换后的特征坐标(例如 CA、CCA、RDA)。
旁注:distance.squareform
调用是不必要的,因为 skbio.DistanceMatrix
支持方形或向量形式的数组。