2016-04-04 18 views
2

scikit-learn PCAを使用して、約20000個のフィーチャと400個以上のサンプルを持つデータセットの主成分を見つけています。オレンジPCAとscikit-learn PCAの結果が異なる

しかし、scikit-learn PCAを使用するOrange3 PCAと比較すると、私は異なる結果を得ています。 Orange3 PCAが提案した正規化オプションもチェックしなかった。

scikit-learnで、最初の主成分は〜14%の割合を占め、2番目の主成分は〜13%を占めるようになります。

私は(第一主成分などのための分散の〜65%)を非常に異なる結果を得るOrange3で

scikit学習を使用して

Orange3 PCA output

私のコードは次のとおりです。

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ブロックに接続しました。このブロックでは、正規化オプションがチェックされていません。

2つの方法の違いはどこですか?

答えて

0

K3---rncのおかげで、私はデータをどのように読み込んだのかを調べました。

しかし、データが正しくロードされていて、欠落データはありませんでした。問題は、Orange3が列上のフィーチャーと行上のサンプルをロードするデータをロードすることで、これは私が期待していたものの逆です。

だから私は、データを転置し、結果はscikit学習モジュールによって指定された結果と同じである:

PCA corrected

おかげ

+2

データポイント(またはサンプル)を表す行とフィーチャを表す列を持つ機械学習の*標準*です。将来の参照のために:P –

+0

合意しました、これはSQL、pandas、およびRデータフレームも同様です。 –

1

おそらくオレンジのPCAプリプロセッサやデータをロードする方法と関係があります。とNaNを交換するため

  • continuization(カテゴリ作り、または決定-に被カテゴリのために、継続的に値、ワンホット変換などを介し)、および
  • 帰属(:PCAは、以下の2つのプリプロセッサが含まれています例えば、平均値)。

ナノ値なしでOrange's three line headerを使用してデータをロードし、すべてのフィーチャを連続的にマーキングして、変換が行われないようにします。

+0

それは私の問題を解決するためだけに私を指摘していませんでした右方向(+1)。私の答えを見てください。ありがとう – gc5