【问题标题】:sklearn PCA not producing unique resultssklearn PCA 没有产生独特的结果
【发布时间】:2018-11-06 18:51:37
【问题描述】:

我正在尝试复制我用另一台计算机编写的内容。现在有了 mac,我得到了这种奇怪的行为。我不知道出了什么问题。在linux下正常工作。

from sklearn.decomposition import PCA
df = df_selected1.values.copy() 
pca = PCA(n_components=2)
for i in range(5):
    pca.fit_transform(df)
    print(pca.explained_variance_)

#output
[ 5.03922837  0.06647913]
[ 15.07182343   1.55837475]
[ 18.83493071   5.11528737]
[ 8.56237035  1.2922362 ]
[ 121.51350407    0.78051842]

编辑:所以如果我的行数少于 60 行,它可以正常工作。如果我添加更多,我会得到错误

LinAlgError: SVD did not converge 

示例数据:

 df = pd.DataFrame([np.ndarray(90),np.ndarray(90),np.ndarray(90),np.ndarray(90)]).transpose()

【问题讨论】:

  • PCA(...) 中使用random_state 参数来使这个可重现。
  • 不能解决问题
  • 什么不能解决问题?您是说将 random_state 设置为整数值仍然会在 for 循环中产生不同的结果吗?请提出一个可重现的问题。
  • 您添加的数据与您使用的数据不对应。

标签: scikit-learn pca


【解决方案1】:

我认为你做错了什么。

在您发布 1) 完整代码、2) 数据、3) 完整错误和 4) 模块的版本之前,我将提供一个使用随机数据的示例。

使用 5000 行和 4 列的示例。

import numpy as np
import pandas as pd

np.random.seed(2)
df = pd.DataFrame(np.random.rand(5000,4))
df1 = df.copy()
pca = PCA(n_components=2, random_state= 2)
for i in range(10):
     pca.fit_transform(df1)
     print(pca.explained_variance_)

[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]
[0.08596479 0.08470371]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2017-06-16
    • 2017-11-28
    • 2011-11-24
    相关资源
    最近更新 更多