K-means的缺点(优化不仅仅是最小化误差)

#转载时,请注明英文原作David Robinson,译者Ding Chao。#

我最近遇到一个交叉验证的问题,我认为这个给我提供了一个很好的机会去用“R”和“ggplot2”探索下K-means算法的一些基本假设。

K-means方法广泛用于聚类分析。可是在我看来,这个算法不需要任何假设啊,也就是说,给我一个数据集和一个预先指定的聚类数目k,然后我就可以应用这个算法去最小化SSE(误差平方和)就行了嘛。

恩。。所以K-means本质上是一个优化问题。

我阅读了一些关于K-means缺点的材料,他们大多指出如下几点:

  • K-means每个属性(变量)的分布方差是球形的。
  • 所有的变量有同样的方差。
  • 对于所有的的聚类来说先验概率相等,也就是说,每一类有大致相等的观测数量。如果以上3个任何一个被触犯K-means就会失效。

我不太能理解这些观点后面的逻辑。我认为K-means本质上是不该有假设的,它就最小化SSE而已,一下子还真看不出来最小化SSE和这3条有什么联系。

我们将考虑假设中的两个,我们来看看如果这个假设被打破这个算法会怎么样。我们贴上2维数据,因为这个更直观些。(感谢“curse of dimensionality”, 增加额外的维度会让这个问题变得更严重)。我们将用统计语言R,全代码在这里

分歧前奏:安斯库姆四重奏

首先,来个类似的。想象有人讨论下面这个:

我读了一些关于线性回归缺点的材料。但是所有的线性回归都是在做基于预测(曲)线的SSE最小化问题。这是一个优化问题,不关乎曲线的形状或者残差值分布。因此,线性回归不需要假设。

嗯,是的,线性回归的工作原理是减少残差平方的总和。但是,这本身并不是回归的目标:我们所试图做的是画一条线,一个可靠的、无偏置的Y-X预测线。高斯 – 马尔科夫定理告诉我们,尽量减少SSE就会达到目标 – 但这定理依赖于一些非常具体的假设。如果这些假设被打破,你仍然可以最小化SSE ,但它可能无任何效果。因为你可以试想一下,比如说说:“你脚推踏板开车。该踏板一直可以被推,不管有多少汽油在汽油罐里。因此,即使油箱是空的,你仍然可以推踏板,驾驶汽车“ 。

但是,说起来很轻松。让我们来看看这冰冷的数据。实际上就是人工数据.

这是我最喜欢的人造数据:安斯库姆四重奏。于1973年由统计学家Francis Anscombe提出。这个能证明盲目相信统计学方法是多么愚蠢的。每个数据集有同样的回归斜率、截距、p-值 和 $R^2$-而且可以瞟一下发现,里面只有 对于线性回归来说是正确的。在 II 它表现出了错误的形状, 在 III 它因为一个离群点弯了形状,在 IV 压根就没有恰当的趋势!

有人会说,“线性回归在这些例子里依旧有效果,因为它在最小化残差值的平方和“。多无聊。。线性回归做了一个线,但是没意义,有啥用?

所以,我们可以发现一个常理的优化可以被执行但是并不意味着达到了预先的目标。

如果打破第一个假设:非球面数据

你说k-means算法在非球面聚类上表现的很好?非球面聚类。。像这样?

也许这不是你期待样子,但它构建地完全合理。看着这个图像,我们人类一眼就认出两个群集。因此,让我们来看看K-means做的咋样:分配不同颜色:

你可能会说:“这不是一个公平的例子…没有聚类方法能正确找到这样怪异的cluster。 ”事实并非如此!尝试下single linkagehierachical clustering

看到了吧!这是因为single-linkage hierarchical clustering对这个数据集做了正确的假设。 (在很多其他的情形下他会失败) 。

你可能会说:“这是一个单一的、极端的、病态的情况。 ” No!例如,可以使外组半圆,而不是一个圈,你会看到k均值仍然如此可怕的(hierarchical clustering仍然做得很好) 。我能想到很多其他情况下,不仅仅是二维的情况。当你集群是16维数据,有各种可能出现的病症。

最后,我要指出, K-means仍然是可用的 !如果您将您的数据转化为极坐标,聚类会有效哦:

这就是为什么了解基本方法的假设是至关重要的:它不只是告诉你什么时候的方法也有缺点,它会告诉你如何解决这些问题。

大小不均匀的集群

如果群集有不太均匀的分部,也能打破K-means聚类?好了,可以考虑这套集群,大小20 , 100 , 500。我从多元高斯函数生成的每个集:

这看起来像K-means或许可以找到这些集群,对不对?所以让我们试试K-means:

哎哟!这里发生的事情是有点微妙。在寻求最大限度地减少内集平方和, K-means算法提供了更多的“权重”给较大的集群。在实践中,要么小群远离任何中心,否则大群就像黑洞,会更多的吞噬小群成员。

如果你试试看这些例子,你会看到,你可以构建k-means构建的一些更感概的场景。

结论:世上没有免费的午餐

对不同的案例下的算法,我可以建造一些让这些算法失效的情形。线性回归假定你的数据沿着直线 – 但如果它遵循一个正弦波呢? t检验假设每个样本来自正态分布:如果你异常抛出个离群值呢?任何梯度上升算法可以得到被困在局部最大值,而任何监督分类可以被过度拟合。

这是什么意思?这意味着,”假设“是你力量的来源!当Netflix推荐给你电影,它是在假设,如果你喜欢一部电影,你会喜欢那些相似的(反之亦然)。难道可以认为:“他只要在最小化误差,算法仍然是有效的”?如果不对用户的口味做出合理的假设,你就不能做出推荐。所以,你也不能用好任何算法在你没有对你的集合数据做出自然假设。

所以,有时候不要只是知道这些缺点。你要认识他们,这样他们就可以告知你如何选择算法。了解他们,你可以知道如何调整你的算法,并且如何转换数据来解决这些问题。

英语原文:http://varianceexplained.org/r/kmeans-free-lunch/

翻译:Ding Chao.

K-means的缺点(优化不仅仅是最小化误差)的更多相关文章

  1. 【Android Developers Training】 84. 将定期更新的影响最小化

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. 优化网站设计(十):最小化JAVASCRIPT和CSS

    前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题. 作为通用的原则,雅虎的工程师团队曾经给出过35个 ...

  3. 生产服务器环境最小化安装后 Centos 6.5优化配置[转]

    内容目录 centos6.5最小化安装后配置网络: IP地址, 网关, 主机名, DNS 更新系统源并且升级系统 系统时间更新和设定定时任 创建普通用户并进行sudo授权管理 修改SSH端口号和屏蔽r ...

  4. 生产服务器环境最小化安装后 Centos 6.5优化配置备忘

    生产服务器环境最小化安装后 Centos 6.5优化配置备忘 作者:Memory 发布于:2014-8-13 15:00 Wednesday 服务器 本文 centos 6.5 优化 的项有18处: ...

  5. Centos6.5生产环境最小化优化配置

    Centos6.5生产环境最小化优化配置,满足业务需求! 01.启动网卡 #centos6.x最小化安装后,网卡默认不是启动状态 ifup eth0  //  ifconfig eth0 up /et ...

  6. poj_3662 最小化第k大的值

    题目大意 有N个节点以及连接的P个无向边,现在要通过这P条边从1号节点连接到N号节点.若无法连接成功,则返回-1:若能够连接成功,那么其中用到了L条边,这L条边中有K条边可以免费,L-K条边不能免费, ...

  7. POJ-3662 Telephone Lines---二分+最短路+最小化第k+1大

    题目链接: https://cn.vjudge.net/problem/POJ-3662 题目大意: 求一条路径从1到n使第k+1大的边最小. 解题思路: 二分答案mid,当原边权小于等于mid新边权 ...

  8. 生产服务器环境最小化安装后Centos 6.5优化配置备忘

    生产服务器环境最小化安装后 Centos 6.5优化配置备忘 本文 centos 6.5 优化 的项有18处,列表如下: 1.centos6.5最小化安装后启动网卡 2.ifconfig查询IP进行S ...

  9. CentOS6 x86_64最小化安装优化脚本

    #!/bin/bash #centos6. x86_64系统最小化安装优化脚本 #系统基础优化,建议以root运行 if [ $USER != "root" ];then echo ...

随机推荐

  1. c# dictionnary根据value查找对应的key

    属性方法中并没有包含此功能,因此需要自己自定义一个方法: string regionName = ""; if (ControlForm.swichLanguage.Contain ...

  2. 【每日scrum】NO.9

    (1)这是我们冲刺的最后一天,晚上我们的团队进行了收尾工作:第一阶段的任务基本完成,软件主要实现了校园景点照片以及对应的介绍,查询最短路径,查询涉及相关景点的查询,查询全部路径,基本界面的设计,导航功 ...

  3. Ubuntu16.04安装json-c

    1. 安装依赖 sudo apt-get install git gcc clang libtool autoconf automake doxygen valgrind 一些版本要求,如果版本过低可 ...

  4. ElasticSearch API 简要介绍

    调用其API会返回很多信息,例如集群的信息,节点的信息等 检查集群的状态----Restful API说明 1:检查集群状态信息 2:管理集群 3:执行 增删改查 命令 4:执行高级命令 Restfu ...

  5. Scrum 项目准备4.0

    4.0----------------------------------------------- 1.准备看板. 形式参考图4. 2.任务认领,并把认领人标注在看板上的任务标签上. 先由个人主动领 ...

  6. IT行业所面临的问题

    在阅读了“2015 IT行业大学生就业分析报告”和“2014年十大最热门行业和职业排行榜 IT行业最吃香_联展新闻”两则新闻后,我决定用一篇和老师对话的形式来表达我的感受. dym:人潮汹涌的招聘市场 ...

  7. IDEA中Git的更新/提交/还原方法

    记录一下在IDEA上怎样将写的代码提交到GitHub远程库: 下面这个图是基本的提交代码的顺序: 1. 将代码Add到stage暂存区本地修改了代码后,需先将代码add到暂存区,最后才能真正提价到gi ...

  8. Java List部分截取,获得指定长度子集合

    subList方法用于获取列表中指定范围的子列表,该列表支持原列表所支持的所有可选操作.返回列表中指定范围的子列表. 语法 subList(int fromIndex, int toIndex) fr ...

  9. Python @retry装饰器的使用与实现案例(requests请求失败并重复请求)

    在爬虫代码的编写中,requests请求网页的时候常常请求失败或错误,一般的操作是各种判断状态和超时,需要多次重试请求,这种情况下,如果想优雅的实现功能,可以学习下retrying包下的retry装饰 ...

  10. eclipse错误:Access restriction: The type 'BASE64Decoder' is not API

    Access restriction: The type ‘BASE64Decoder’ is not API (restriction on required library ‘D:\java\jd ...