2013-11-15 15 views
6

私はkaggle.com's digit recognizer competitionをPythonとscikit-learnを使って試しています。PCA実行前後のデータサイズ

トレーニングデータからラベルを除去した後、私はこのようなリストにCSV内の各行を追加します。

for row in csv: 
    train_data.append(np.array(np.int64(row))) 

私は、テストデータのために同じことを行います。 (?と特徴抽出):

def preprocess(train_data, test_data, pca_components=100): 
    # convert to matrix 
    train_data = np.mat(train_data) 

    # reduce both train and test data 
    pca = decomposition.PCA(n_components=pca_components).fit(train_data) 
    X_train = pca.transform(train_data) 
    X_test = pca.transform(test_data) 

    return (X_train, X_test) 

私は、k最近傍分類器を作成し、X_trainたデータを使ってフィットし、使用して予測を行う

私は、次元削減を実行するために、PCAを使用してこのデータを前処理しますX_testデータ。

この方法を使用すると、約97%の精度が得られます。

私の質問は、PCAの前と後のデータの次元についてですが

を行いtrain_dataX_trainの大きさは何ですか?

コンポーネントの数は出力の次元にどのように影響しますか?彼らは同じことですか?

答えて

11

PCAアルゴリズムは、データの共分散行列の固有ベクトルを求めます。固有ベクトルとは何ですか?誰も知らないし、誰も気にしない(ちょうど冗談だ!)。重要なことは、第1の固有ベクトルが、データが最も大きな分散を有する方向(直感的には、広がり)に平行なベクトルであることである。第2の方向は、最大広がりの点で第2の方向を示し、以下同様である。もう1つの重要な事実は、これらのベクトルがお互いに直交しているため、それらがbasisを形成することです。

pca_componentsパラメータは最高基底ベクトルはあなたが興味のあるどのように多くのアルゴリズムを伝え、あなたが100を渡すのであれば、それはあなたが(統計学者が言う:を説明)を記述100基底ベクトルを取得することを意味します。ほとんどのデータの分散。

transform関数変換(srslyが?;))この例では選択されたPCA成分(によって形成された基準に元の基礎データ - 第最良100ベクター)。これは、回転されている点の雲であり、一部の寸法が無視されていることを視覚化することができます。コメントの中で正しくJaimeが指摘したように、これはprojecting the dataの新しい基準に相当します。

3Dの場合、最初の2固有ベクトルで構成される基底を取得したい場合は、3D点群を最初に回転させるため、最も分散が座標軸に平行になります。次に、分散が最も小さい軸が破棄され、2Dデータが残されます。

あなたの質問に直接答えるには:はい、希望するPCAコンポーネントの数は、変換後の出力データの次元数です。

関連する問題