ITPub博客

首页 > 大数据 > 数据分析 > K-means-:在聚类时发现异常

K-means-:在聚类时发现异常

原创 数据分析 作者:Tybyq 时间:2018-12-03 17:20:09 0 删除 编辑

11月4日和5日,BigML加入哈马德滨 哈利法大学 卡塔尔计算研究所 (QCRI),将 机器学习学校带到卡塔尔的多哈 我们很高兴有机会与QCRI合作。

在会议期间,Sanjay Chawla博士讨论了他的异常聚类算法, k-means- 我们认为使用我们的特定领域语言实现机器学习工作流程 WhizzML 的变体来实现它的变体是一种有趣的练习  

k均值算法的通常过程如下。 它从一些数据集,一些数量的簇 k 和一些预期的异常值 l开始 它随机选取 k个 质心,并根据哪一个最接近,将数据集的每个点分配给这些质心中的一个。 到目前为止,它就像香草k-means一样。 在vanilla k-means中,您现在可以找到每个聚类的均值并将其设置为新的质心。 然而,在k-means中,你首先找到 l 离指定质心最远的点,并从数据集中过滤它们。 使用剩余点找到新的质心。 通过去除这些点,我们将发现不受异常值影响的质心,因此不同(并且希望更好)质心。

我们已经 在BigML (集群资源)中 实现了 k-means 但这不是香草k-means。 不是通过平均集群中的所有点来找到新的质心,而是通过对点进行采样并使用梯度下降方法来更快地实现BigML。 BigML也比vanilla k-means选择更好的初始条件。 我们将改编Chawla的k-means,而不是失去这些好处,在核心迭代中使用完整的BigML集群资源。

这个WhizzML脚本是我们实现的核心。

(定义(得到- 异常 DS - ID  过滤- DS  ķ  升)
  (让(集群- ID(创建- 和- 等待- 集群 { “K”  ķ
                                             “数据集”已 过滤- ds })
        batchcentroid - id(create - and - wait - batchcentroid
                            { “cluster”  cluster - id
                             “dataset”  ds - id
                             “all_fields”是 真的
                             “距离”是 真的
                             “output_dataset”  true })
        batchcentroid(获取 batchcentroid - id)
        centroid - ds(batchcentroid  “output_dataset_resource”)
        sample - id(create - and - wait - sample  centroid - ds)
        field - id(((fetch  centroid - ds)“objective_field”)“id”)
        异常(获取 样本- id { “row_order_by”(str  “ - ”  field - id)
                                    “模式”  “线性”
                                    “行”  l
                                    “index”  true }))
    (删除* [ batchcentroid - id  sample - id ])
    { “cluster-id”  cluster - id
     “centroid-ds”  centroid - ds
     “实例”((异常 “样本”)“行”)}))

让我们逐行检查。 在移除我们的异常之前,让我们运行整个k-mean序列, 而不是 在算法的每个步骤 中移除 l个 异常值。

cluster - id(创建- 和- 等待- 集群 { “k”  k  “数据集”  过滤- ds })

然后很容易创建一个批量质心,其中输出数据集与附加的质心之间的距离。

batchcentroid - id(create - and - wait - batchcentroid { “cluster”  cluster - id
                                                 “dataset”  ds - id
                                                 “all_fields”是 真的
                                                 “距离”是 真的
                                                 “output_dataset”
                                                   真的 })

要获得特定点,我们需要使用BigML示例资源来获取最远的点。

sample - id(create - and - wait - sample  centroid - ds)

我们现在可以找到与第 l 个实例 关联的距离 ,然后过滤掉距离原始数据集的距离大于所有距离的所有点。

异常(获取 样本- id { “row_order_by”(str  “ - ”  field - id)
                            “模式”  “线性”
                            “行”  l
                            “index”  true }))

我们重复这个过程,直到质心稳定,这是通过在算法的后续迭代中通过异常值组之间的Jaccard系数的阈值来确定的,或者直到我们达到用户设置的某个最大迭代次数。

您可以在 GitHub 或BigML库中 找到完整的代码

那么当我们运行这个脚本时会发生什么? 让我们尝试 红葡萄酒质量 数据集。 这是使用13的k(使用BigML g-means集群选择)和10的l的结果。

我们可以导出集群摘要报告,并将其与具有相同 k 的vanilla BigML集群进行比较 正如您所期望的那样,通过去除外围点,k-均值减去两个结果时质心标准差的平均值更小:0.00128对0.00152。

我们作为异常值删除的点数怎么样? 我们知道它们是否真的异常吗? 当我们通过BigML异常探测器运行葡萄酒数据集时,我们可以根据隔离森林获得前十个异常。 与脚本找到的十个异常值相比,我们看到共有六个实例。 这是一个体面的协议,我们已经删除了真正的异常值。

我们希望您喜欢BigML如何使用研究来轻松定制ML算法的演示。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31557424/viewspace-2222563/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-31

  • 博文量
    173
  • 访问量
    60530