PCA 用于分类特征?

Posted

技术标签:

【中文标题】PCA 用于分类特征?【英文标题】:PCA For categorical features? 【发布时间】:2017-04-09 06:33:47 【问题描述】:

据我了解,我认为 PCA 只能针对连续特征执行。但是,在尝试了解 onehot 编码和标签编码之间的区别时,通过以下链接中的帖子:

When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?

它指出,一个热编码后跟 PCA 是一种非常好的方法,这基本上意味着 PCA 应用于分类特征。 因此感到困惑,请同样建议我。

【问题讨论】:

我想问一下以下文章是否通过对它们的 ASCII 字节表示求和来将分类变量转换为数字是一个好主意? blog.davidvassallo.me/2015/10/28/… 【参考方案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]])

【讨论】:

感谢您的详细解释。你能建议我如何在你的代码中解释一个热编码器的结果吗? 如果我没记错的话,PCA 算法通过求解特征向量和特征值将特征投影到不同的空间。然后它查看前 N 个(在这种情况下为 3 个)最大特征值并获取这些特征向量分量。这个想法是用更少的特征对最有用的数据进行编码。 哦,你问的是一个热编码器......功能 1 有两个选项(0 和 1),功能 2 有三个选项(0、1 和 2),还有四个选项特征 3(0、1、2 和 3)。总共有 9 个选项,因此我们有 9 个热编码特征。希望这能让您按照正确的思路思考以了解正在发生的事情。 您隐藏在地毯下,您所谓的分类变量的“编码”本质上仍然是其二进制表示,因此即使您可以在其上应用 PCA,这并不一定意味着这是有道理的。 你可以在 one-hot 编码时应用 PCA - 问题是它是否有意义?【参考方案2】:

基本上,PCA 会发现并消除关于特征集的信息量较少(重复)的信息,并降低特征空间的维度。换句话说,想象一个 N 维的超空间,PCA 会找到数据变化最大的 M (M

因此,特征是否连续并不重要。

PCA 广泛用于许多应用程序。主要用于在分类/识别之前消除来自某些传感器或硬件的嘈杂、信息量较少的数据。

编辑:

从统计学上讲,分类特征可以看作是区间 [0,1] 内的离散随机变量。期望 EX 和方差 E(X-EX)^2) 的计算对于离散 rvs 仍然有效且有意义。在分类特征的情况下,我仍然支持 PCA 的适用性。

假设您想预测“某天是否会下雨”。您有分类特征 X,即“我必须在给定的一天上班吗”,1 表示是,0 表示否。显然天气条件不取决于我们的工作日程,所以 P(R|X)=P(R)。假设每周工作 5 天,在我们随机收集的数据集中,X 的 1 比 0 多。 PCA 可能会导致在您的特征表示中删除这个低方差维度。

归根结底,PCA 是为了在最小化信息损失的情况下进行降维。直观地说,我们依靠给定轴上数据的方差来衡量其对任务的有用性。我认为将其应用于分类特征没有任何理论上的限制。实际价值取决于应用和数据,连续变量也是如此。

【讨论】:

嗯,它有点归结为计算协方差矩阵的特征向量,因此有二进制数据(例如 one-hot),你将如何解释从二进制点到平均值的距离?【参考方案3】:

我不同意其他人。

虽然您可以在二进制数据上使用 PCA(例如一次性编码数据),但这并不意味着它是一件好事,或者它会很好地工作。

PCA 是为连续 变量设计的。它试图最小化方差(=平方偏差)。当你有二元变量时,平方偏差的概念就失效了。

是的,您可以使用 PCA。是的,你得到一个输出。它甚至是最小二乘输出:PCA 不会对此类数据进行分段错误。它有效,但它的意义远没有你想要的那么好;并且据说比例如更有意义频繁模式挖掘。

【讨论】:

有人能解释一下为什么方差的概念会因二元变量而失效吗? (我知道它与期望值是多余的,但它仍然传达了某种传播感,不是吗?)此外,由于 PCA 是基于方差-协方差矩阵的分解,因此 variance 与二进制变量一起分解也意味着二进制变量与任何其他类型的变量之间的协方差 是没有意义的? PCA 的任何替代方案更适合单热编码的分类数据?【参考方案4】:

MCA 是一种用于分类数据降维的已知技术。在 R 中有很多包可以使用 MCA,甚至可以在混合环境中与 PCA 混合使用。在 python 中也存在一个 mca 库。 MCA 应用了与 PCA 类似的数学,实际上是法国统计学家曾经说过的“数据分析是找到正确的矩阵来对角化”

http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/

【讨论】:

【参考方案5】:

以下出版物在对视为单纯形顶点的分类变量计算 PCA 时显示了出色且有意义的结果:

Niitsuma H., Okada T. (2005) 分类变量的协方差和 PCA。在:Ho T.B., Cheung D., Liu H. (eds) Advances in Knowledge Discovery and Data Mining。 PAKDD 2005。计算机科学讲义,第 3518 卷。Springer,柏林,海德堡

https://doi.org/10.1007/11430919_61

可通过 https://arxiv.org/abs/0711.4452 获得(包括 PDF 格式)。

【讨论】:

你为什么回滚那个编辑?这篇论文发表于 2005 年,尽管顶部的日期是 2018 年。请参阅arxiv.org/abs/0711.4452,这是您链接到的 PDF 的来源(2007 年提交当然意味着它在那之后就不能发布)。而且,更重要的是,citation reference for this paper 100% 明确这是 2005 年的工作表。【参考方案6】:

我认为 pca 通过利用 var 之间的线性关系来减少 var。 如果 onehot 中只有一个分类变量编码,则 onehoted 列之间没有线性关系。所以它不能通过 pca 减少。

但如果存在其他vars,则onehoted cols可能可以通过其他vars的线性关系来表示。

所以可能它可以通过 pca 减少,取决于 vars 的关系。

【讨论】:

以上是关于PCA 用于分类特征?的主要内容,如果未能解决你的问题,请参考以下文章

用于分类的词袋 - 特征与像素

我用PCA做特征降维后svm分类效果不好,为什么

使用 PCA 进行图像分析/特征提取

用于数据减少的主成分分析 (PCA) 与额外树分类器

PCA-特征提取

如何在 MATLAB 中使用 pca 函数来选择有效的特征? [复制]