-1
我試圖複製找到here的PCA示例,但試圖運行pca_summary()時出現以下錯誤,任何想法都不勝感激。謝謝!使用python sckit-learn進行PCA分析 - 輸入錯誤
raise TypeError("data argument can't be an iterator")
TypeError: data argument can't be an iterator
我試圖複製找到here的PCA示例,但試圖運行pca_summary()時出現以下錯誤,任何想法都不勝感激。謝謝!使用python sckit-learn進行PCA分析 - 輸入錯誤
raise TypeError("data argument can't be an iterator")
TypeError: data argument can't be an iterator
這是zip
引起的常見問題。
這是因爲zip
在python 3中改變了,它現在返回一個迭代器。
在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)
您正在使用什麼版本的Python用? – DavidG
我正在使用3.6.0 –
我可以使用python 3.6重現錯誤。它似乎是在pca_summary函數內的這行:summary = pd.DataFrame(zip(a,b,c),index = names,columns = columns)導致python 3.6中的問題。 – sera