PCA 对于分类特征?
PCA For categorical features?
以我的理解,我认为PCA只能对连续特征进行。但是在试图理解 onehot 编码和标签编码之间的区别时,通过以下 link 中的 post:
When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?
它说一个热编码然后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 发现并消除了特征集上信息较少(重复)的信息,并降低了特征的维度 space。换句话说,想象一个 N 维的 hyperspace,PCA 找到数据变化最大的 M (M < N) 个特征。这样,数据可以表示为 M 维特征向量。从数学上讲,它是某种特征的特征值和特征向量计算space。
所以,特征是否连续并不重要。
PCA 在许多应用中被广泛使用。主要用于消除 classification/recognition.
之前来自某些传感器或硬件的嘈杂、信息量较少的数据
编辑:
从统计学上讲,分类特征可以看作是[0,1]区间内的离散随机变量。期望 E{X} 和方差 E{(X-E{X})^2) 的计算对于离散 rvs 仍然有效且有意义。我仍然支持 PCA 在分类特征的情况下的适用性。
考虑一个你想预测是否 "It is going to rain for a given day or not" 的情况。您有分类特征 X,它是 "Do I have to go to work for the given day",1 表示是,0 表示否。显然天气状况不取决于我们的工作时间表,所以 P(R|X)=P(R)。假设每周工作 5 天,在我们随机收集的数据集中,X 的 1 多于 0。 PCA 可能会导致在您的特征表示中删除这种低方差维度。
归根结底,PCA 是为了在信息丢失最少的情况下进行降维。直观上,我们依靠给定轴上数据的方差来衡量其对任务的有用性。我认为将其应用于分类特征没有任何理论限制。实用价值取决于应用和数据,连续变量也是如此。
我不同意其他人的观点。
虽然 您可以对二进制数据使用 PCA(例如单热编码数据),但这并不意味着它是一件好事,或者它会工作得很好。
PCA 专为连续 变量而设计。它试图最小化方差(=方差)。当你有二元变量时,方差的概念就会失效。
是的,您可以使用 PCA。是的,你得到了一个输出。它甚至是一个最小二乘输出:PCA 不会对此类数据产生段错误。它有效,但意义远不如您希望的那样;并且据称不如例如有意义频繁模式挖掘。
MCA 是一种已知的分类数据降维技术。在 R 中有很多包可以使用 MCA,甚至可以在混合上下文中与 PCA 混合使用。在 python 中也存在一个 mca 库。 MCA 应用与 PCA 类似的数学,实际上法国统计学家曾经说过,"data analysis is to find correct matrix to diagonalize"
http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/
在对被视为单纯形顶点的分类变量计算 PCA 时,以下出版物显示了非常有意义的结果:
Niitsuma H., Okada T. (2005) Covariance and PCA for Categorical Variables. In: Ho T.B., Cheung D., Liu H. (eds) Advances in Knowledge Discovery and Data Mining. PAKDD 2005. Lecture Notes in Computer Science, vol 3518. Springer, Berlin, Heidelberg
可通过 https://arxiv.org/abs/0711.4452 获取(包括 PDF 格式)。
我认为 pca 通过利用 var 之间的线性关系来减少 var。
如果在 onehot 中只有一个分类 var 编码,则 onehot cols 之间没有线性关系。所以它不能通过 pca 减少。
但如果有其他变量存在,则单个热列可能可以通过其他变量的线性关系呈现。
所以可能是pca减少,取决于vars的关系。
在this paper中,作者使用PCA来组合高基数的分类特征。如果我没理解错的话,他们首先计算每个目标的条件概率class。然后他们选择一个阈值超参数,并为每个要组合的分类特征的条件 class 概率创建一个新的二进制变量。执行 PCA 以将新的二进制变量与指定为超参数的保留组件数组合。
以我的理解,我认为PCA只能对连续特征进行。但是在试图理解 onehot 编码和标签编码之间的区别时,通过以下 link 中的 post:
When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?
它说一个热编码然后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 发现并消除了特征集上信息较少(重复)的信息,并降低了特征的维度 space。换句话说,想象一个 N 维的 hyperspace,PCA 找到数据变化最大的 M (M < N) 个特征。这样,数据可以表示为 M 维特征向量。从数学上讲,它是某种特征的特征值和特征向量计算space。
所以,特征是否连续并不重要。
PCA 在许多应用中被广泛使用。主要用于消除 classification/recognition.
之前来自某些传感器或硬件的嘈杂、信息量较少的数据编辑:
从统计学上讲,分类特征可以看作是[0,1]区间内的离散随机变量。期望 E{X} 和方差 E{(X-E{X})^2) 的计算对于离散 rvs 仍然有效且有意义。我仍然支持 PCA 在分类特征的情况下的适用性。
考虑一个你想预测是否 "It is going to rain for a given day or not" 的情况。您有分类特征 X,它是 "Do I have to go to work for the given day",1 表示是,0 表示否。显然天气状况不取决于我们的工作时间表,所以 P(R|X)=P(R)。假设每周工作 5 天,在我们随机收集的数据集中,X 的 1 多于 0。 PCA 可能会导致在您的特征表示中删除这种低方差维度。
归根结底,PCA 是为了在信息丢失最少的情况下进行降维。直观上,我们依靠给定轴上数据的方差来衡量其对任务的有用性。我认为将其应用于分类特征没有任何理论限制。实用价值取决于应用和数据,连续变量也是如此。
我不同意其他人的观点。
虽然 您可以对二进制数据使用 PCA(例如单热编码数据),但这并不意味着它是一件好事,或者它会工作得很好。
PCA 专为连续 变量而设计。它试图最小化方差(=方差)。当你有二元变量时,方差的概念就会失效。
是的,您可以使用 PCA。是的,你得到了一个输出。它甚至是一个最小二乘输出:PCA 不会对此类数据产生段错误。它有效,但意义远不如您希望的那样;并且据称不如例如有意义频繁模式挖掘。
MCA 是一种已知的分类数据降维技术。在 R 中有很多包可以使用 MCA,甚至可以在混合上下文中与 PCA 混合使用。在 python 中也存在一个 mca 库。 MCA 应用与 PCA 类似的数学,实际上法国统计学家曾经说过,"data analysis is to find correct matrix to diagonalize"
http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/
在对被视为单纯形顶点的分类变量计算 PCA 时,以下出版物显示了非常有意义的结果:
Niitsuma H., Okada T. (2005) Covariance and PCA for Categorical Variables. In: Ho T.B., Cheung D., Liu H. (eds) Advances in Knowledge Discovery and Data Mining. PAKDD 2005. Lecture Notes in Computer Science, vol 3518. Springer, Berlin, Heidelberg
可通过 https://arxiv.org/abs/0711.4452 获取(包括 PDF 格式)。
我认为 pca 通过利用 var 之间的线性关系来减少 var。 如果在 onehot 中只有一个分类 var 编码,则 onehot cols 之间没有线性关系。所以它不能通过 pca 减少。
但如果有其他变量存在,则单个热列可能可以通过其他变量的线性关系呈现。
所以可能是pca减少,取决于vars的关系。
在this paper中,作者使用PCA来组合高基数的分类特征。如果我没理解错的话,他们首先计算每个目标的条件概率class。然后他们选择一个阈值超参数,并为每个要组合的分类特征的条件 class 概率创建一个新的二进制变量。执行 PCA 以将新的二进制变量与指定为超参数的保留组件数组合。