据我了解,我认为PCA只能用于连续功能。但是,虽然试图理解onehot编码和标签编码之间的区别来自以下链接中的帖子:
When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?
它指出一个热编码后跟PCA是一种非常好的方法,这基本上意味着PCA应用于分类特征。 因此困惑,请建议我同样。
答案 0 :(得分:25)
我不同意其他人。
虽然你可以在二进制数据上使用PCA (例如单热编码数据),这并不意味着它是一件好事,或者它可以很好地工作。
PCA针对连续变量进行设计。它试图最小化方差(=平方偏差)。当你有二元变量时,平方偏差的概念会崩溃。
是的,你可以使用PCA。是的,你得到一个输出。它甚至是一个最小平方的输出 - 它不像PCA会对这些数据进行分段。它有效,但它比你想要的更少有意义;并且据说没有比例如频繁模式挖掘。
答案 1 :(得分:3)
基本上,PCA查找并消除关于特征集的信息量较少(重复)的信息并减少特征空间的维度。换句话说,想象一个N维超空间,PCA发现数据变化最大的M(M 因此,功能是否连续并不重要。 PCA在许多应用中被广泛使用。主要用于在分类/识别之前消除来自某些传感器或硬件的噪声较小,信息量较少的数据。
答案 2 :(得分:3)
MCA是用于分类数据维度减少的已知技术。在R中有很多使用MCA的包,甚至在混合环境中与PCA混合使用。在python中也存在一个mca库。 MCA应用类似的数学,PCA,实际上法国统计学家曾经说过,"数据分析是找到正确的矩阵来对角化"
http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/
答案 3 :(得分:2)
A recent publication在对被视为单纯形顶点的分类变量进行PCA计算时显示出了非常有意义的结果。
分类变量的协方差和PCA ,Nitsuma Hirotaka和Okada Takashi,2018年。
答案 4 :(得分:1)
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]])
答案 5 :(得分:-1)
我认为pca通过利用var之间的线性关系来减少var。 如果在onehot中仅编码了一个分类变量,则onehoted列之间就没有线性关系。因此无法通过pca减少。
但是如果存在其他变量,则可以通过其他变量的线性关系来表示单列cols。
所以它可以减少pca,取决于vars的关系。