从分类数据集中删除冗余特征( make_classification )

Posted

技术标签:

【中文标题】从分类数据集中删除冗余特征( make_classification )【英文标题】:Removing the redundant feature from classification dataset ( make_classification ) 【发布时间】:2021-04-09 10:19:33 【问题描述】:

在make_classification方法中,

X,y = make_classification(n_samples=10, n_features=8, n_informative=7, n_redundant=1, n_repeated=0 , n_classes=2,random_state=6)

关于n_redundant的文档字符串:冗余特征的数量。这些特征生成为 信息特征的随机线性组合。

关于n_repeated的文档字符串:重复特征的数量,从信息中随机抽取

    n_repeated 特征很容易被挑选出来,因为它们与信息丰富的特征高度相关。 重复和冗余特征的文档字符串表明两者都是从信息特征中提取的。

我的问题是:如何删除/突出显示冗余特征,它们有什么特点。

附上所有特征之间的相关热图,图中哪个特征是多余的。

请帮忙。

【问题讨论】:

我投票结束这个问题,因为它是关于统计数据,而不是编程。它属于Cross Validated 而不是这里。 谢谢你的评论,我其实是在看sklearn的观点,如何从假数据生成方法中去除冗余数据。 【参考方案1】:
    检查有多少独立列使用np.linalg.matrix_rank(X) 要查找矩阵 X 的线性独立行的索引,请使用 sympy.Matrix(X).rref()

演示

生成数据集并检查独立列的数量(矩阵等级):

from sklearn.datasets import make_classification
from sympy import Matrix

X, _ = make_classification(
    n_samples=10, n_features=8, n_redundant=2,random_state=6
)
np.linalg.matrix_rank(X, tol=1e-3)
# 6

查找线性独立列的索引:

_, inds = Matrix(X).rref(iszerofunc=lambda x: abs(x)<1e-3)
inds
#(0, 1, 2, 3, 6, 7)

移除依赖列并检查矩阵秩(独立列的数量):

#linearly independent
X_independent = X[:,inds]
assert np.linalg.matrix_rank(X_independent, tol=1e-3) == X_independent.shape[1]

【讨论】:

谢谢你的解决方案,我已经连接了问题,上面的解决方案,它总是显示最后全为零的列,(我尝试调整数据)。不特定于冗余特征的索引。还是我在这里遗漏了什么。 谢谢。是的,同意,它根据冗余特征显示零行,但是,它没有突出显示冗余特征的索引(在矩阵末尾始终显示为零)。可能存在除最后一个索引之外的其他功能可能是多余的情况。希望我能够解释我的观点。 @SantoshKumar 请查看更新。正如您正确指出的那样,QR 分解中的 R 矩阵仅说明矩阵的等级,而不是哪些特定列是线性相关的。如果依赖 QR 分解,他必须manually 找到负责 R 矩阵末尾的全零行的列。

以上是关于从分类数据集中删除冗余特征( make_classification )的主要内容,如果未能解决你的问题,请参考以下文章

KNN分类器

什么叫冗余

python数据挖掘(从数据集中抽取特征)

如何在 Weka 中构建 SVM 分类器以仅考虑数据集中的某些特征?

KNN分类器(十折交叉验证)

K-邻近(KNN)算法