2017-05-04 41 views
1

我在Python中使用PCA來減少我擁有的數據的維數。目前的數據有768行和10列。PCA:結果矩陣n-1行

我使用下面的代碼來實現PCA:

import numpy as np 
from sklearn import decomposition 

demo_df = pd.read_csv('data.csv') 
pca = decomposition.PCA(n_components=4) 

comps = pca.fit(demo_df).transform(demo_df) 

np.savetxt('data_reduced.csv', comps, delimiter=',') 

根據我的理解所產生的文件應包含768行4列(因爲n_components = 4)。

但得到的數據有N-1行即767

爲什麼一行從數據丟失?

回答

3

是的,你的理解是正確的。但在傳遞給PCA之前請檢查demo_df的形狀。它的長度必須是767.PCA不會從您的數據中刪除任何樣本。

不同之處在於使用read_csv()。請看documentation of pandas.read_csv()。它有一個參數header及其描述是如下:

頭:int或整數的列表,默認的「推斷」

行號(一個或多個),以作爲 使用列名,並開始的數據。如果沒有名字傳遞,默認行爲就好像 設置爲0,否則爲無。顯式傳遞header = 0 以能夠替換現有名稱。標題可以是列表 的整數的列表,其指定列 上的多索引的行位置。 [0,1,3]。未指定的中間行將被跳過 (例如,在此示例中跳過2)。請注意,如果skip_blank_lines = True,則此參數忽略 註釋行和空行,因此header = 0 表示數據的第一行,而不是文件的第一行。

它通過默認使用文件的第一行作爲列標題,如果不通過使用另一個參數names的明確提供的那些標題。

所以,如果你不想使用你的文件作爲列標題的第一行,你應該通過在read_csv的header = None()這樣的:

demo_df = pd.read_csv('data.csv', header = None)