2016-04-04 95 views
2

我使用scikit-learn PCA来找到具有20000个特征和400多个样本的数据集的主要组成部分。Orange PCA和scikit-learn PCA之间的不同结果

但是,与Orange3 PCA哪个应该使用scikit-learn PCA相比,我得到了不同的结果。我也没有检查Orange3 PCA提出的标准化选项。

随着scikit学习第一主成分约占总方差14%,第二约13%等。

随着Orange3我得到一个非常不同的结果(〜为第一主成分等方差的65%):

Orange3 PCA output

使用scikit学习我的代码如下:

import pandas as pd 
from sklearn.decomposition import PCA 
matrix = pd.read_table("matrix.csv", sep='\t', index_col=0) 
sk_pca = PCA(n_components=None) 
result = sk_pca.fit(matrix.T.values) 
print(result.explained_variance_ratio_) 

使用Orange3,我使用文件块加载了csv。然后我将这个块连接到PCA块,在那里我取消选中规范化选项。

这两种方法的区别在哪里?

回答

0

感谢K3---rnc的回答,我检查了我是如何加载数据的。

但是数据正确加载,没有丢失数据。问题在于Orange3加载数据,将这些特征放在行上的列和样本上,这与我期望的做法相反。

所以我调换了数据和结果是一样的由scikit学习模块中给出的结果:

PCA corrected

感谢

+2

机器学习中的*标准*是表示数据点(或样本)的行和表示要素的列。仅供将来参考:P –

+0

同意,这是SQL,pandas和R数据框所做的。 –

1

可能与Orange的PCA预处理器或加载数据的方式有关。 PCA包含以下两个预处理器:

  • continuization(用于制备分类,或确定将要-分类,值成连续的,例如通过一个热变换),和
  • 插补(用于替换的NaN例如平均值)。

确保您加载没有nan值的数据,并使用Orange's three line header,标记所有功能连续,因此不会进行任何转换。

+0

它并没有解决我的问题,但他指出我的正确的方向(+1)。看到我的答案。谢谢 – gc5