如何在混合数据集中使用聚类算法减少维数?

数据挖掘 Python 聚类 特征选择 数据科学模型 降维
2022-02-15 12:40:17

我正在使用与电视消费数据相对应的混合数据集,目的是将特征数量减少到仅与使用聚类检测电视消费模式(或消费组)相关的那些。

该数据集由大约 20 个维度和 2.000.000 个样本组成,消耗 1 天。我可以访问长达 3 年的消费数据,因此我可以利用高达约 10 亿的数据。我的想法是只使用几天的消耗量(因此需要几百万个数据)开始工作。

3 个维度是连续/数字类型(消费的日期时间、持续时间......),其余维度是离散/分类类型,具有二元选项的特征(例如程序是否实时)或多个甚至数百个选项(例如程序名称、主题、设备类型等)。出于这个原因,我试图用 Python 实现一个可以处理混合数据的聚类算法。

由于我怀疑有很多维度可能与我的研究无关,所以我想减少特征的数量。为此,我考虑过应用一些聚类算法,并通过删除给定的特征来检查聚类结果是否不受影响。

但是,我不知道应该计算或使用什么指标来评估聚类结果以及删除其中一个属性的效果。

目前我已经应用了基于 K-means 但用于混合数据的 K-prototypes 算法。在 Python 中很容易实现(https://antonsruberts.github.io/kproto-audience/)。但是,它只返回集群标签、质心坐标和成本(定义为所有点到各自质心的距离之和)。因此,我不知道如何解释结果或如何研究特征的效果。

我想知道我解决问题的方法是否正确,我应该使用什么指标来评估聚类结果并减少维数,以及 Python 中是否有其他易于实现的算法(用于聚类或无监督特征选择) 能够处理我拥有的数据类型。

1个回答

一些减少特征数量的常用技术:

  • 缺失值比率。缺失值过多的数据列不太可能携带很多有用的信息。因此,可以删除缺失值数量大于给定阈值的数据列。阈值越高,减少的力度越大。

  • 低方差滤波器。与前面的技术类似,数据变化很小的数据列携带的信息也很少。因此,所有方差低于给定阈值的数据列都将被删除。需要注意的是:方差取决于范围;因此,在应用此技术之前需要进行归一化。

  • 随机森林/集合树。决策树集合,也称为随机森林,除了是有效的分类器外,对特征选择也很有用。我个人更喜欢这种方法,因为它很容易实现。内核中给出了使用示例 --> https://www.kaggle.com/prashant111/xgboost-k-fold-cv-feature-importance?scriptVersionId=48823316&cellId=74

  • 高相关滤波器。具有非常相似趋势的数据列也可能包含非常相似的信息。在这种情况下,只有其中一个就足以为机器学习模型提供数据。在这里,我们将数值列之间和名义列之间的相关系数分别计算为皮尔逊积矩系数和皮尔逊卡方值。相关系数高于阈值的列对减少到只有一个。需要注意的是:相关性是规模敏感的;因此,为了进行有意义的相关比较,需要对列进行归一化。

参考:https ://www.kdnuggets.com/2015/05/7-methods-data-dimensionality-reduction.html