基于聚类结果的分类

数据挖掘 分类 聚类
2022-02-17 14:50:27

这是样本数据:

Values    Attribute1    Attribute2    Attribute3    Attribute4
  2.5       1980            A            1.5           C
  1.8       2000            A            0.4           B
  12.4      2017            S            18.5          D
  0.4       1987            R            10            P
......

在我的真实数据中,我有 60 多个属性。我需要做的是:

  1. 将值分类为不同的组
  2. 使用 Attribute1 - Attribute4 对这些组进行分类。

一些困难是:

  1. 值在我的应用程序中意味着某些东西。例如,Values>10 将被归为一组。因此,使用基于密度的聚类算法将值分组可能并不理想。

  2. 当我使用基于值的组和所有属性来运行分类时,我可能需要选择一些重要的属性。

我想要的是为聚类算法提供值(有意义的数据)。因此,我可以从该聚类中获得最佳结果/见解。

所以,这是我的问题:

  1. 如何集群?
  2. 如何选择属性?
2个回答

我认为您需要进行一些特征工程,即,正如您在问题中解释的那样,这些值对您的应用程序有意义。

例如:1-3:差,4-6:一般,7-10:好

V1 new_V1
3   Bad
5   Average
7   Good

像这样的东西,这样聚类算法就可以理解了。

假设您在使用 R 时没有任何限制。如果您同时拥有 Numeric 和 Categorical 变量(如上),那么您可以使用这个包:ClustMixType,它可以理解并根据所提供的数据进行聚类。由于传统的 K 均值算法在这里不适用,因为它仅适用于数值数据。

如果数据有任何差异,您可以通过 new_V1 <- as.factor(new_V1);显式转换它们。如果V2 <- as.numeric(V2)在将数据提供给聚类算法之前它是一个数值变量。

一旦你得到它,那么你可以使用这个包:Bruota,使用这个包来获取预测器重要性(所有变量都是重要的)。这只有在您知道目标变量时才能完成,您的目标变量很可能是聚类结果。

实施到此结束,请点击此链接

很可能你最终会得到你想要的结果,如果你有任何其他问题,请告诉我。

1.关于Values的聚类

由于值在该问题中具有特定含义,因此您可能希望自己选择任意设置范围的类别。(使用与上述答案相同的示例,这看起来像:1-3:差,4-6:平均,7-10:好)。在这种情况下,如果答案的范围不是预先定义的(所以它不像高中成绩,而是更像人们的体重),请确保使用相同大小的范围。

另一种方法是为此目的使用基于距离的算法(例如kmeans),这样集群的范围将不稳定,而是自动选择以最小化距离。它与本视频中的 T 恤示例(从 1.35 开始)类似,但只有一个变量。

在这两种情况下,您都必须自己设置集群的数量。在第二种情况下,这可以通过可视化数据并查看集群是否有意义来更容易地完成。由于这是您的输出变量(并且此过程将只执行一次),我认为您不应该自动执行此重要步骤,而是在选择最终分组之前使用您的判断。

2.关于特征选择: 有很多特征选择算法可供选择。是一篇评论文章,可以给你一些想法。SVM-RFE(具有递归特征消除的支持向量机)是特征选择技术与分类的非常强大的组合,通常效果很好。您可以通过将分类属性转换为虚拟变量来处理它们。

决策树分类器也可以完成这项工作。他们根据一些标准(例如熵)根据自动生成的规则进行分类。可以看到每个属性对分类的重要性(GINI 重要性)

在 python 的 scikit learn 包中,这两种建议的方法都有很好的实现:

深思:我不知道您要解决的确切问题是什么,但是您是否考虑过直接对数据使用决策树回归器?您可以将值用作目标变量,将其余属性用作数据集。创建的决策树的末端叶子将是“值簇”,并且每个样本都将被分类到其中之一。(也可在此处的 scikit 学习工具箱中获得