可理解的聚类

时间:2012-08-28 08:01:44

标签: algorithm machine-learning computer-science data-mining cluster-analysis

我有一个数据集。该集合的每个元素由数字和分类变量组成。分类变量是名义上的和有序的。 该数据集中有一些自然结构。通常,专家使用他们的“专家知识”对我的数据集进行聚类,但我希望自动化这个聚类过程。

大多数聚类算法使用对象之间的距离(Euclidean,Mahalanobdis等)将它们分组。但很难找到混合数据类型的合理指标,即我们找不到'glass'和'steel'之间的距离。所以我得出结论,我必须使用条件概率 P(feature = 'something' | Class)和一些依赖于它们的效用函数。对于分类变量是合理的,假设它们是正常分布的,它对数值变量很好。

所以我很清楚像 K-means 这样的算法不会产生好的效果。

此时我尝试使用 COBWEB 算法,这完全符合我使用条件概率的想法。但是我遇到了另一个障碍:聚类的结果很难解释,如果不是不可能的话。因此,我希望得到类似于描述每个聚类的一组规则(例如if feature1 = 'a' and feature2 in [30, 60], it is cluster1),就像用于分类的决策树一样。

所以,我的问题是:

是否存在适用于混合数据类型的现有聚类算法,并为集群生成可理解的(对人类而言是合理的)描述。

其他信息:

据我所知,我的任务是在概念聚类领域。由于研究领域的原因,我不能像它所建议的那样定义一个相似性函数(它作为呐喊项目的最终目标) - 它在形式化方面非常复杂和无情。据我所知,最合理的方法是COBWEB中使用的方法,但我不确定如何调整它,所以我可以得到一个不可靠的簇的描述。

决策树

正如所建议的那样,我尝试在聚类输出上训练决策树,从而将聚类描述作为一组规则。但不幸的是,这条规则的解释几乎和原始聚类输出一样难。从根节点开始,只有少数第一级规则确实没有任何意义:更接近叶子 - 我们没有意义。其次,这些规则与任何专业知识都不相符。

所以,我得出的结论是聚类是一个黑盒子,不值得尝试解释它的结果。

同时

我有一个有趣的想法是以某种方式修改“回归决策树”算法:而不是计算组内方差计算category utility function并将其用作拆分标准。因此,我们应该有一个带有叶子集群和集群描述的决策树。但我没有尝试这样做,我不确定准确性和其他一切。

3 个答案:

答案 0 :(得分:11)

对于大多数算法,您需要定义相似性。它不需要是适当的距离函数(例如满足三角不等式)。

K-means特别糟糕,因为它还需要计算意味着。因此,如果你不能计算平均值,或者使用与欧几里德不同的距离函数,最好远离它。

但是,请考虑定义一个距离函数,该函数捕获您的域相似性知识。它可以由其他距离函数组成,比如你使用欧几里德距离的调和平均值(可能用一些比例因子加权)和一个分类相似度函数。

一旦你有一个不错的相似性功能,你就可以使用一大堆算法。例如DBSCAN (Wikipedia)OPTICS (Wikipedia)。您可能对ELKI感兴趣,他们有Tutorial on writing custom distance functions

解释是一个单独的事情。 不幸的是,很少有聚类算法可以让您对他们发现的内容进行人类可读的解释。他们可能会给你一些代表性的东西(例如k-means中聚类的均值),但不多。但是当然你可以接下来在群集输出上训练决策树并尝试解释从群集中学到的决策树。因为关于决策树的一个非常好的特征,它们在某种程度上是人类可以理解的。但就像支持向量机不会给你一个解释一样,大多数(如果不是全部)聚类算法都不会这样做,对不起,除非你做这种后处理。此外,它实际上可以使用任何聚类算法,如果你想比较多种算法,这是一个不错的属性。

去年有一则相关的出版物。它有点模糊和实验性(在ECML-PKDD的研讨会上),并且要求数据集在排名方面具有相当广泛的基础事实。在该示例中,他们使用颜色相似性排名和一些标签。关键的想法是分析集群并使用给定的基本事实找到最佳解释。他们试图将它用于例如说“发现的这个群集很大程度上是基于这种特殊的绿色阴影,所以它不是很有趣,但是其他群集不能很好地解释,你需要更接近地研究它 - 也许算法发现了一些东西 new 可能能够使用此功能,只需使用您的功能作为基本事实。然后它应该检测如果群集可以通过诸如“attribute5大约0.4,低方差”之类的东西容易地解释。但它不会强行创建这样的解释!

  • H.-P。 Kriegel,E。Schubert,A。Zimek
    评估多个群集解决方案
    在第二届MultiClust研讨会上:发现,总结和使用与ECML PKDD 2011一起举行的多个聚类。http://dme.rwth-aachen.de/en/MultiClust2011

答案 1 :(得分:4)

解决此类聚类问题的常用方法是定义一个捕获数据相关特征的统计模型。可以使用混合模型(如在高斯混合模型中)导出聚类分配,然后找到特定数据点具有最高概率的混合分量。

在您的情况下,每个示例都是一个包含实际和分类组件的向量。一种简单的方法是分别对矢量的每个分量进行建模。

我生成了一个小示例数据集,其中每个示例都是两个维度的向量。第一个维度是正态分布式变量,第二个维度是五个类别的选择(见图表):

enter image description here

有许多框架可用于运行统计模型的蒙特卡罗推理。 BUGS可能是最受欢迎的(http://www.mrc-bsu.cam.ac.uk/bugs/)。我在Stan(http://mc-stan.org/)中创建了这个模型,它使用了与BUG不同的采样技术,并且对于许多问题更有效:

data {
  int<lower=0>  N; //number of data points
  int<lower=0>  C; //number of categories

  real x[N]; // normally distributed component data
  int y[N];  // categorical component data
}
parameters {
  real<lower=0,upper=1> theta; // mixture probability
  real mu[2]; // means for the normal component
  simplex[C] phi[2]; // categorical distributions for the categorical component
}

transformed parameters {
  real log_theta;
  real log_one_minus_theta;
  vector[C] log_phi[2];
  vector[C] alpha;

  log_theta <- log(theta);
  log_one_minus_theta <- log(1.0 - theta);

  for( c in 1:C)
    alpha[c] <- .5;

  for( k in 1:2)
    for( c in 1:C)
        log_phi[k,c] <- log(phi[k,c]);
}
model {
  theta ~ uniform(0,1); // equivalently, ~ beta(1,1);
  for (k in 1:2){
    mu[k] ~ normal(0,10);
    phi[k] ~ dirichlet(alpha);
  }

  for (n in 1:N) {
    lp__ <- lp__ + log_sum_exp(log_theta + normal_log(x[n],mu[1],1) + log_phi[1,y[n]],
                               log_one_minus_theta + normal_log(x[n],mu[2],1) + log_phi[2,y[n]]);
  }
}

我编译并运行了Stan模型,并使用最终样本中的参数来计算每个混合成分下每个数据点的概率。然后,我将每个数据点分配给混合组件(群集),以更高的概率恢复下面的群集分配:

enter image description here

基本上,如果您创建了适合您的数据集的模型,每个混合组件的参数将为您提供每个群集的核心特征。

答案 2 :(得分:2)

对于您描述的异质非欧几里德数据向量,hierarchical clustering algorithms通常效果最好。您描述的条件概率条件可以合并为用于执行集群聚合或划分的属性的排序。生成的集群的语义很容易描述。