使用 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)
我正在尝试复制 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)