2016-11-24 144 views

回答

9

我不同意別人。

雖然您可以使用PCA二進制數據(例如一個熱門編碼數據),這並不意味着這是一件好事,或它會工作得很好。

PCA is desinged for continuous variables。它試圖最小化方差(=平方偏差)。當有二元變量時,平方偏差的概念會被打破。

所以是的,你可以使用PCA。是的,你會得到一個輸出。它甚至是最小平方輸出 - 並不像PCA會在這些數據上發生故障。它可以工作,但它比你想要的要少得多有意義的;並且據認爲比例如頻繁模式挖掘。

0

PCA是一個dimensionality reduction method,可以應用任何一組功能。下面是使用OneHotEncoded(即分類)的數據的一個示例:

from sklearn.preprocessing import OneHotEncoder 
enc = OneHotEncoder() 
X = enc.fit_transform([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]).toarray() 

print(X) 

> array([[ 1., 0., 1., 0., 0., 0., 0., 0., 1.], 
     [ 0., 1., 0., 1., 0., 1., 0., 0., 0.], 
     [ 1., 0., 0., 0., 1., 0., 1., 0., 0.], 
     [ 0., 1., 1., 0., 0., 0., 0., 1., 0.]]) 


from sklearn.decomposition import PCA 
pca = PCA(n_components=3) 
X_pca = pca.fit_transform(X) 

print(X_pca) 

> array([[-0.70710678, 0.79056942, 0.70710678], 
     [ 1.14412281, -0.79056942, 0.43701602], 
     [-1.14412281, -0.79056942, -0.43701602], 
     [ 0.70710678, 0.79056942, -0.70710678]]) 
+0

感謝詳細的解釋。你可以建議我如何解釋代碼中一個熱門編碼器的結果。 – vikky

+0

如果我正確記得,PCA算法通過求解特徵向量和特徵值將特徵投影到不同的空間上。然後它查看頂部N(在這種情況下爲3)最大特徵值並取這些特徵向量分量。這個想法是用更少的功能編碼最有用的數據。 – AlexG

+0

謝謝youuuuuuu – vikky

2

基本上,PCA發現並消除功能集較少信息(一式兩份)的信息和減少的特徵空間的維數。換句話說,設想一個N維超空間,PCA發現數據變化最大的特徵M(M < N)。這樣數據可以表示爲M維特徵向量。在數學上,它是某種特徵值計算特徵空間的特徵向量。

因此,功能是否連續並不重要。

PCA在許多應用中被廣泛使用。主要用於在分類/識別之前消除來自某些傳感器或硬件的嘈雜,信息量較少的數據。