在我的理解中,我认为PCA只能用于连续功能。PCA对于分类特征?
When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?
它指出,一个热码,然后PCA是一个很好的方法,这基本上意味着PCA:但是当试图了解onehot编码和标签编码之间的差异通过以下链接此帖一适用于分类特征。 因此困惑,请建议我一样。
在我的理解中,我认为PCA只能用于连续功能。PCA对于分类特征?
When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?
它指出,一个热码,然后PCA是一个很好的方法,这基本上意味着PCA:但是当试图了解onehot编码和标签编码之间的差异通过以下链接此帖一适用于分类特征。 因此困惑,请建议我一样。
我不同意别人。
虽然您可以使用PCA二进制数据(例如一个热门编码数据),这并不意味着这是一件好事,或它会工作得很好。
PCA is desinged for continuous variables。它试图最小化方差(=平方偏差)。当有二元变量时,平方偏差的概念会被打破。
所以是的,你可以使用PCA。是的,你会得到一个输出。它甚至是最小平方输出 - 并不像PCA会在这些数据上发生故障。它可以工作,但它比你想要的要少得多有意义的;并且据认为比例如频繁模式挖掘。
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]])
基本上,PCA发现并消除功能集较少信息(一式两份)的信息和减少的特征空间的维数。换句话说,设想一个N维超空间,PCA发现数据变化最大的特征M(M < N)。这样数据可以表示为M维特征向量。在数学上,它是某种特征值计算特征空间的特征向量。
因此,功能是否连续并不重要。
PCA在许多应用中被广泛使用。主要用于在分类/识别之前消除来自某些传感器或硬件的嘈杂,信息量较少的数据。
MCA是用于分类数据降维的已知技术。在R中,有很多包使用MCA,甚至在混合环境中与PCA混合使用。在python中也存在一个mca库。 MCA应用该PCA,的确是法国统计学家曾经说过类似的数学,“数据分析发现正确的矩阵对角化”
http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/
感谢详细的解释。你可以建议我如何解释代码中一个热门编码器的结果。 – vikky
如果我正确记得,PCA算法通过求解特征向量和特征值将特征投影到不同的空间上。然后它查看顶部N(在这种情况下为3)最大特征值并取这些特征向量分量。这个想法是用更少的功能编码最有用的数据。 – AlexG
谢谢youuuuuuu – vikky