PCA用于分类功能



在我的理解中,我认为只能为连续功能执行PCA。但是,在试图理解OneHot编码和标签编码之间的区别时,通过以下链接中的帖子:

何时使用一个热编码与labElencoder vs dictvectorizor?

它指出,一个热编码后面是PCA是一种非常好的方法,这基本上意味着PCA用于分类特征。因此,很困惑,请在相同的情况下建议我。

我不同意其他人。

您可以在二进制数据上使用pca (例如,一个hot编码的数据),这并不意味着这是一件好事,或者它将很好地工作。

PCA专为连续变量而设计。它试图最小化方差(=平方偏差)。当您有二进制变量时,平方偏差的概念会崩溃。

是的,您可以使用PCA。是的,您将获得输出。它甚至是最小二乘的输出:PCA似乎并不是在此类数据上删除。它有效,但是它比您想要的要少得多。据说比例如频繁的模式挖掘。

MCA是一种已知的分类数据维度降低技术。在R中,有很多包装可以使用MCA,甚至在混合环境中与PCA混合。在Python中也存在一个MCA库。MCA应用了类似的数学,与法国统计学家所说的类似数学相似:"数据分析是为了找到正确的矩阵来对角线"

http://gastonsanchez.com/visally-enforced/how-to/2012/10/10/13/mca-in-r/

基本上,PCA在功能集中找到并消除了较少信息(重复)信息,并降低功能空间的维度。换句话说,想象一个n维超空间,PCA发现数据最变化的M(m< n)特征。这样,数据可以表示为M维特征向量。从数学上讲,它是特征值的某种知识特征空间的特征向量计算。

因此,是否连续的功能并不重要。

PCA广泛用于许多应用程序。主要是为了消除分类/识别之前的某些传感器或硬件带来的嘈杂,信息较少的信息。

编辑:

从统计上讲,分类特征可以看作是间隔中的离散随机变量[0,1]。预期E {X}和方差E {(X-E {X})^2)的计算仍然有效而有意义。在具有分类功能的情况下,我仍然代表PCA的适用性。

考虑一种您想预测"它是否会在给定一天下雨"的情况。您有分类功能X,这是"我必须在给定的一天上工作",1为Yes,为0。显然,天气条件不取决于我们的工作时间表,因此P(r | x)= p(r)。假设每周进行5天的工作,在随机收集的数据集中,我们的X有1秒钟。PCA可能会导致在您的功能表示中删除这个低变化的维度。

一天结束时,PCA用于缩小尺寸,信息损失最小。直观地,我们依靠在给定轴上的数据方差来衡量其对任务的有用性。我认为将其应用于分类特征没有任何理论限制。实际价值取决于应用和数据,这也是连续变量的情况。

以下出版物在分类变量上计算PCA时显示出很大且有意义的结果:

Niitsuma H.,Okada T.(2005)分类变量的协方差和PCA。在:Ho T.B.,Cheung D.,Liu H.(eds)知识发现和数据挖掘方面的进步。Pakdd2005。计算机科学的讲义,第3518卷。Springer,柏林,海德堡

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

可以通过https://arxiv.org/abs/0711.4452(包括PDF)。

在本文中,作者的使用PCA结合高基数的分类特征。如果我正确理解,他们首先计算每个目标类别的条件概率。然后,他们选择一个阈值超参数,并为每个有条件的类概率创建一个新的二进制变量,以组合每个分类特征。执行PCA以将新的二进制变量与保留为超参数的组件的数量相结合。

pca是一个可以应用任何任何尺寸的方法一组功能。这是使用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正在通过利用VAR之间的线性关系来减少VAR。如果仅在onehot中编码一个分类VAR,则词根之间没有线性关系。因此,它无法通过PCA减少。

但是,如果那里有其他var,则可以通过其他vars的线性关系来呈现词汇。

因此,它可能可以通过PCA减少,取决于VAR的关系。

相关内容

  • 没有找到相关文章

最新更新