使用 python scikit-learn 进行 PCA 分析 - 类型错误

PCA analysis using python scikit-learn - type error

我正在尝试复制 here 中的 PCA 示例,但是当尝试 运行 pca_summary() 时,我收到以下错误,任何想法都非常感谢。谢谢!

   raise TypeError("data argument can't be an iterator")
TypeError: data argument can't be an iterator

这是 zip 引起的常见问题。

这是因为 zip 在 python 3 中发生了变化,现在 returns 是一个迭代器。

see also here

pca_summary 函数中执行此操作:

def pca_summary(pca, standardised_data, out=True):
    names = ["PC"+str(i) for i in range(1, len(pca.explained_variance_ratio_)+1)]
    a = list(np.std(pca.transform(standardised_data), axis=0))
    b = list(pca.explained_variance_ratio_)
    c = [np.sum(pca.explained_variance_ratio_[:i]) for i in range(1, len(pca.explained_variance_ratio_)+1)]
    columns = pd.MultiIndex.from_tuples([("sdev", "Standard deviation"), ("varprop", "Proportion of Variance"), ("cumprop", "Cumulative Proportion")])
    summary = pd.DataFrame(list(zip(a, b, c)), index=names, columns=columns)
    if out:
        print("Importance of components:")
        display(summary)
    return summary

所以只需替换

summary = pd.DataFrame(zip(a, b, c), index=names, columns=columns)

summary = pd.DataFrame(list(zip(a, b, c)), index=names, columns=columns)