机器学习(ML)是当前的热门话题。
有监督的机器学习受到了很多关注。 他们有华丽的神经网络、朴素贝叶斯分类器和许多其他甜蜜的方法(其中一些已在我们的 JMP 博客在这里)。
但有监督的机器学习需要标签或真实数据。 如果我们不能告诉计算机何时正确或错误,我们就不能要求计算机了解猫是什么。 不幸的是,在某些数据集中很难获得标签。 人们想出了一些巧妙的方法来廉价地获取标记数据,比如验证码,它要求你点击每张有停止标志的照片,或者谷歌著名的 Quick Draw 应用程序;但标记大型数据集的成本可能会很高。
通常,我们没有标签或真相,但我们有数据。 在这些情况下,我们需要使用联合国监督机器学习。 无监督机器学习之所以如此命名,是因为我们无法告诉它什么是对的,什么是错的。 就像新来的保姆不知道家里的规则一样,无监督的机器学习算法没有正确的答案。 当算法出错时,我们无法“纠正”算法,因为没有明确的正确或错误答案。
虽然它不是唯一的无监督机器学习类型,但集群是一种非常流行的类型。 当我们没有预先建立数据组时,我们的本能通常是自己创建这些组。 一般来说,聚类的目的是将距离较近的数据点分到同一组,将距离较远的数据点分到不同的组。 这就是所谓的凝聚(相似点在一起)和分离(不同点没有)。 因为我们没有用于比较的标签,所以我们经常根据集群/组的凝聚力和分离程度来判断它们的“成功”。
K-均值
让我们看一下这个来自一家大型百货商店的小数据集RA 费舍尔的。 费舍尔正在寻求实施新的三级奖励计划,但员工需要知道为三级中的每一级提供什么样的优惠。
他们收集了 30 位顾客的平均购买次数和每次购买的平均商品数量的试点数据。 数据如下图所示。
我们希望将客户分为三组,以便我们可以拥有适合每个客户的级别。 因此,我们决定使用 k 均值,根据客户每年的平均旅行次数以及每次旅行平均购买的商品数量将客户分为三组。
k-means 的第一步是选择 k。 我们选了三个。 然后我们从数据中随机选取 k 个点。 我们将把这些数据点视为三个集群的中心。
然后,我们将每个数据点分配到最接近的点的簇中。 例如,顶部的这个点最接近蓝色点,因此它将位于蓝色簇中。
我们以这种方式将每个点分配给一个簇。
现在我们有了三个簇,我们可以重新计算每个簇的新中心。
然后将每个点重新分配给其新的最接近的簇。
然后,我们重复这些步骤,直到集群成员(或中心)不改变:
- 计算中心
- 重新分配积分
一旦达到这种状态,我们的模型就已经收敛的,我们使用这些集群成员资格作为最终的集群分配。
现在,我们可以使用集群为 Fisher's 创建三个客户层。 看起来我们有一个明确的红色群体,他们的行程很少,并且没有购买很多物品。 为了让它们更频繁地进店,我们在周二提供 15% 的折扣。
绿色组的旅行次数适中,但旅行时会购买大量物品。 为了迎合他们的需求,我们的银卡套餐将包含每周一件商品 60% 折扣的优惠券,以便让这些顾客更频繁地光临。
最后,我们的黄金级将迎合蓝色群体,他们定期进入商店,但只购买一些商品。 该级别包括一年两次的活动,以买一送一 50% 折扣为特色,试图吸引这些顾客购买更多商品。
K-means 是将数据分组的好方法。 即使我们的示例只有两个维度(行程和项目),k 均值也可以很好地处理更高维度的数据。 只是更难在博客文章中绘制结果......
之前我提到过无监督学习没有任何“正确”的答案来与我们的结果进行比较。 我们无法计算准确性或灵敏度。 但我们可以计算出凝聚力和分离度的衡量标准。 最常见的是剪影分数。 Silhouette 分数范围在 -1 到 1 之间,分数越高越好。人工智能)是数据点之间的平均距离,及其集群中的所有其他数据点。 这衡量了凝聚力,即集群中数据点彼此的接近程度。 紧密结合的簇将具有小的a(i)s 。
双)是之间的最小平均距离我以及不同簇中的每个点。 这测量了分离度,即簇彼此之间的分离程度。 定义明确的簇将具有较高的值双) 。
总而言之,远离其他聚类点但接近其自身聚类中的点的点的轮廓得分将具有较高的正轮廓得分。 与其他簇中的点比与自身簇中的点更接近的点将具有较小的甚至负的轮廓分数。
通过取每个数据点的轮廓分数的平均值,我们可以了解我们的集群与数据的拟合程度。 我们的客户集群的轮廓得分(比如说快 10 倍……)是 0.614,这意味着我们的集群相对具有凝聚力和独立性。
当我们获得较高的平均轮廓分数时,我们相信我们已经发现了某种潜在结构在数据中。 如果聚类与自身相似且与其他聚类不同,那么这些聚类似乎是自然发生的,而不是我们强加给数据的。
期望最大化(混合高斯)
K-means 是一种相对快速且简单的数据聚类算法。 它学习起来很快,而且实施起来也很快。 但它有两个潜在的缺点:首先,它假设球形,这意味着簇的形状像多维球体。 在实践中,这大致意味着我们假设所有特征都具有相等的方差,但这通常是不正确的。 考虑根据猫每天喵喵的平均次数以及它们的长度(以厘米为单位)对猫进行聚类。 这两件事不太可能具有相同的方差。
第二个问题是 k-means 给出难的集群分配。 每个点恰好属于一个簇。 有时,特别是在簇的边缘附近,我们可能需要考虑一个点可能属于两个簇中任意一个的事实。 就像这里的这一点。 它可能是蓝色的或者绿色的。
因此,当我们认为...或知道...我们的不同特征不具有相等的方差,或者我们想要柔软的对于聚类分配,我们可以参考 k 均值的流行推广:期望最大化(Expectation Maximization),简称 EM。
期望最大化通常使用混合高斯分布(又称多维正态分布)来实现。 因为这有点拗口,我们将这种技术称为正态混合,因为 JMP 就是这么称呼它的。 我们假设我们观察到的所有数据都来自k多维正态分布,我们想弄清楚这些分布是什么。
就像 k 均值一样,正态混合使用随机起点,但它不是仅选取中心,而是为每个 k 分布选择随机均值和协方差。 起初,这些可能看起来有点古怪,但请坚持我们。
这是期望步骤或 E 步骤。 然后,我们计算每个点属于每个分布的概率。 我们不是将每个数据点硬分配给一个簇,而是说它属于每一个具有一定概率的聚类。
接下来是M步骤。 我们重新计算分布参数,就像我们在 k 均值中计算新中心一样。 因为每个数据点都以一定的概率属于每个簇,所以我们使用每个点来计算新的分布参数,并根据它们各自属于该组的概率对它们进行加权。 属于簇 A 的概率只有 0.01% 的点不会对簇 A 的均值和协方差的计算产生太大影响。 至少没有与有 75% 机会属于簇 A 的点进行比较。
如果您热衷于数学,新均值和协方差的公式如下。



这些公式与我们通常用来计算均值和协方差的公式几乎相同 - 但添加了一个它通过数据点属于第 k 个分布的可能性来衡量数据点对计算的贡献。
一旦我们有了每个 k 个分布的新参数,我们就再次执行 E 步骤并重新计算每个点属于每个分布的概率。
然后当然是 M 步骤,然后是另一个 E 步骤......一直到我们的分布“收敛”。这要么意味着 E 和 M 步骤的每次迭代都不会发生任何变化,或者至少不会发生太大变化。 通常,我们会查看对数似然,并确保它相对稳定。
现在我们有了每个数据点属于每个簇的概率。 如果我们需要硬聚类分配,我们可以选择每个数据点属于概率最高的聚类。 但 EM 的好处是我们可以接受集群成员资格的模糊性。 我们可以查看一个数据点并考虑这样一个事实:虽然它很可能属于集群 B,但它也很可能属于集群 D。这还考虑到我们的集群之间可能没有明确的边界这一事实。 这些组由重叠的多维分布组成,因此绘制清晰的切割线可能并不总是最好的解决方案。
JMP 中的聚类
联合管理计划使聚类变得异常简单。 您所需要做的就是转到“分析”菜单 >“聚类”。 均提供 K 均值和带有高斯混合的 EM(在菜单中称为正态混合)。


只需选择其中之一K-均值或者普通混合物,选择要聚类的列,然后选择要查找的聚类数。 点击去,你就会得到你的输出! 如果您想保存聚类分配,只需单击聚类分析旁边的红色三角形,然后选择保存簇!
要查看集群图,请单击红色三角形并选择双标图。
如果您想一次尝试多个 k,只需添加到范围K 均值或正态混合物平台中的框。 您的输出现在将显示每个 k 的信息! JMP 将为您选择最佳的 k 显示在集群比较菜单。
对于 k 均值,JMP(如 SAS)使用三次聚类准则(这就是 CCC 的代表)来选择最适合您的数据的 k。 CCC 值越高越好,表明您的聚类与数据拟合得很好,类似于轮廓分数的方式。 JMP 将选择具有最高 CCC 值的 k 作为最佳聚类。 有关 CCC 的更多信息,请参阅这里。

对于正态混合物,JMP 使用 AICc(修正的 Akaike 信息准则)和 BIC(贝叶斯信息准则)来选择最佳 k。 AIC 和 BIC(如轮廓分数和 CCC)都衡量模型(此处为您的集群)与数据的拟合程度。 AIC 和 BIC 值较小表示模型拟合良好,因此 JMP 将选择给出以下值的 k最低AIC/BIC 值(请注意,由于数据集较小,因此缺少一些 AICc 值)。
结论
现在您知道如何使用了联合管理计划使用 k 均值和高斯混合模型(或 JMP 中的正态混合)对数据进行聚类! 因此,当您获得没有标签或真实数据的超级酷数据集时,您仍然可以使用无监督机器学习创建一些非常酷的见解。
这很棒。您能否分享数据(以及脚本,如果您已保存到数据表)以便我们尝试一下?