2016-11-24 116 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在许多应用中被广泛使用。主要用于在分类/识别之前消除来自某些传感器或硬件的嘈杂,信息量较少的数据。