1. K-均值聚类

让我们了解无需大量数学知识的K-Means聚类!

1.1 K-Means的核心思想

K-Means是一种无监督的机器学习技术,其核心思想是基于某些特征以某种方式对记录或数据点进行分组(或聚类),以便每个组包含彼此非常相似但与记录不太相似的记录其他群体。 在这里,就记录数据点而言,我只是指数据集的一行,对于 要素而言,我指的是数据集的

这里要注意的一件重要事情是,在对记录进行分组时,我们实际上不知道可以为每个组分配什么标签(或名称)? 或将哪种或哪种记录分组在一起? 这使得K-Means成为无监督的机器学习技术。

将记录分组在一起后,我们可以随机检查每个组中的某些记录,并尝试了解将哪些记录保持在一起和/或是否可以基于该特定组中的记录为该组命名? 因此,我们可以执行这种类型的手动评估(有时称为“定性检查”)来了解K-Means如何处理我们的数据 。 但是,由于这是手动检查,因此如果您有大量组或每个组中有大量记录,则可能不可行。

因此,由于这是一种无监督的技术,因此没有完美的方法来评估组的质量,但是,几乎没有数学和统计方法来评估组的质量,因此我们可以进行相当好的分组,但是在这里我们不会进入那个数学资料!

此外,还没有任何完美的方法来确定数据的组数(#-group或#clusters或K均值中的K)。 有时,主题知识有助于确定K的值,但并非总是如此!

1.2让我们看一个例子

想象一下,您是被一所大学雇用来了解学生毕业后的收入的。 大学以前所做的所有努力都失败了! 大学要解决上述问题的标准(或特征)是:学生的GPA,SAT分数,GRE分数等等。 不幸的是,这些标准无法解决问题。

因此,您想到了一些独特的东西:您与毕业的学生联系,并询问他们以下内容:’ 平均而言,您在学位课程中每学期学习了多少小时? ‘本质上,您的想法是通过根据学生在特定学期的学习时间进行聚类来了解收入模式。 需要牢记的重要一点:我们 并不是 根据学习时间来预测收入,而是试图了解是否存在分组。 您获得了〜1000个匿名回复,并且您的示例数据集如下所示(假设他们的学位课程只有2个学期!):

样本数据:仅考虑包含小时的列

现在,您不知道根据这些时间可以了解多少个组(或集群)以了解收入模式。 也就是说,只有两个组(高收入和低收入)可能足以解决问题,或者三个组(高,中,低收入)可能就足够了,或者您可能需要四个组-非常高,高,低和非常低的收入(我在1.1中提到,我们实际上事先并不知道团体的名称,但是在这里我为了方便理解而将其命名)。 另外,一个学生只能属于一个组。 因此,问题是:最佳描述数据的最佳组(或群集)数目是多少?

接下来,您开始使用自己喜欢的编程语言来实现K-Means算法。 正如我之前提到的,没有一种完美的方法来评估集群的质量。 因此,您定义了自己的标准(实际上,甚至没有必要)。 您要做的是:用#clusters = 2做K均值,这意味着将所有学生分成两个不同的集群。

可选: 有关上一段的一些技术细节 :运行K-Means时,它将在n维空间(n = #features)中随机声明2个点,并带有一组坐标(将是两个聚类的质心)。 然后,它计算数据集的每个记录与这两个质心之间的距离。 最后,根据距离将记录放置在最接近质心的簇中。

现在,由于两个质心的初始声明是随机的,因此我们不一定获得高质量的聚类。 因此,K-Means这样做:它逐个访问每个群集,并通过平均该特定群集中数据点的值来为每个群集找到新的质心。 这样,我们获得了两个质心的一组新位置,然后重新计算了每个记录与新质心之间的距离,并将记录放入最近的簇中。

重复此过程很多次,直到将记录放置(或分配)到不同群集中的操作停止更改。 对于任何数量的集群和功能,整个过程都保持不变。

具有2个簇和2个特征的K-Means的连续迭代。 链接:https://goo.gl/psv3Hj

然后找到在同一学位课程中学习的学生的平均学习时间。 也就是说,属于集群1的所有学生的平均小时数(M_1)与集群2(M_2)相同。 假设从此基本分析中可以发现,M_1和M_2之间没有太大区别。 换句话说,落入不同类的学生或多或少地学习了相同的小时数(假设数据中没有异常值!)。 因此,该聚类将不会为您提供学生的薪水和他们学习的时间之间的任何关系。 换句话说,您可能无法仅通过使用两个群集(在这种情况下为两个收入组)来隔离学生。

现在,您的目标是使不同群集的小时平均值之间的差异最大。 最终的结果是它增加了:群集之间的不相似性(以平均小时数表示)和群集中的相似性。

接下来,使用#clusters = 3进行K均值,得到:M_1,M_2和M_3。 像以前一样进行定性检查,如果不满意,请进一步增加群集数量。 假设当您使用#clusters = 5实施K-Means时,您得到了很好的结果,即,每个学生在每个学期学习的平均小时数方面,集群之间存在显着差异。 在此示例中,五个聚类可以指示五个收入组,例如:非常高,高,中等,低和非常低的收入(您当然可以通过随机查看数据中每个聚类的某些学生的收入进行检查)。

具有5个簇和2个特征的K均值的示例图片链接:https://goo.gl/CUX8mi

以下可能是您对大学的结论或建议 :与那些花费较少时间学习的学生相比,平均花费非常长时间学习的学生收入要高得多。 换句话说,假设一个学期花费大量时间学习的学生属于第一类,而花费很少时间学习的学生属于第五类。 这可能意味着第一类学生的平均工资比第五类学生的平均工资高。

K-Means的优点:

  1. 这是一种易于理解的技术。 即使有数学依据!
  2. 对于小型数据集,速度非常快。

K-均值的缺点:

  1. 对于大型数据集和大量功能,它的计算量很大。
  2. 如果数据集稀疏,则可能无法获得高质量的聚类。
  3. 有时,很难确定K均值的聚类数。
  4. 它对异常值很敏感,因此在实施K-Means之前应考虑扩展功能。
  5. 由于质心的初始声明是随机的,因此每次运行K-Means时,我们可能会以不同的记录分配给不同的簇结束。 也就是说,对于第一次完整运行,如果某些记录最终位于群集1中,那么在下一次运行中,它们可能不会最终位于同一群集中。

注意事项

  1. 存在大量的YouTube视频,博客和文章,它们可以用数学方式解释K-Means,请随时使用它们搜索Google
  2. 我已经交替使用“ 组”和“ 集群”这两个词。
  3. 我们定义的用于评估K-Means性能的标准是可选的(或者您可以根据要尝试回答的问题定义任何标准)。 这样做的原因是:得出一些结论并解释结果,因为解释是进行清晰沟通的关键。

希望本文能帮助您理解K-Means,而无需任何复杂的数学!