K-means的缺点(优化不仅仅是最小化误差)
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$-而且可以瞟一下发现,里面只有 I 对于线性回归来说是正确的。在 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的缺点(优化不仅仅是最小化误差)的更多相关文章
- 【Android Developers Training】 84. 将定期更新的影响最小化
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 优化网站设计(十):最小化JAVASCRIPT和CSS
前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题. 作为通用的原则,雅虎的工程师团队曾经给出过35个 ...
- 生产服务器环境最小化安装后 Centos 6.5优化配置[转]
内容目录 centos6.5最小化安装后配置网络: IP地址, 网关, 主机名, DNS 更新系统源并且升级系统 系统时间更新和设定定时任 创建普通用户并进行sudo授权管理 修改SSH端口号和屏蔽r ...
- 生产服务器环境最小化安装后 Centos 6.5优化配置备忘
生产服务器环境最小化安装后 Centos 6.5优化配置备忘 作者:Memory 发布于:2014-8-13 15:00 Wednesday 服务器 本文 centos 6.5 优化 的项有18处: ...
- Centos6.5生产环境最小化优化配置
Centos6.5生产环境最小化优化配置,满足业务需求! 01.启动网卡 #centos6.x最小化安装后,网卡默认不是启动状态 ifup eth0 // ifconfig eth0 up /et ...
- poj_3662 最小化第k大的值
题目大意 有N个节点以及连接的P个无向边,现在要通过这P条边从1号节点连接到N号节点.若无法连接成功,则返回-1:若能够连接成功,那么其中用到了L条边,这L条边中有K条边可以免费,L-K条边不能免费, ...
- POJ-3662 Telephone Lines---二分+最短路+最小化第k+1大
题目链接: https://cn.vjudge.net/problem/POJ-3662 题目大意: 求一条路径从1到n使第k+1大的边最小. 解题思路: 二分答案mid,当原边权小于等于mid新边权 ...
- 生产服务器环境最小化安装后Centos 6.5优化配置备忘
生产服务器环境最小化安装后 Centos 6.5优化配置备忘 本文 centos 6.5 优化 的项有18处,列表如下: 1.centos6.5最小化安装后启动网卡 2.ifconfig查询IP进行S ...
- CentOS6 x86_64最小化安装优化脚本
#!/bin/bash #centos6. x86_64系统最小化安装优化脚本 #系统基础优化,建议以root运行 if [ $USER != "root" ];then echo ...
随机推荐
- struts2--上传总结(限制大小和类型 非法上传的跳转)
网上有很多版本,鉴于实践出真知的态度 我自己探索了一番 struts版本:2.3.16 限制大小: struts2默认是2M 所以如果要扩大大小限制,应该先配一个全局struts2最大上限 <c ...
- 软工网络15团队作业4-DAY8
每日例会 昨天的工作. 张陈东芳:可导入部分类信息,继续尝试将所有信息导入: 吴敏烽:商品类的规范化编写: 周汉麟:界面的排版继续优化: 林振斌:按照浏览历史,次数等,继续优化商品类排序: 李智:研究 ...
- PAT 甲级 1040 Longest Symmetric String
https://pintia.cn/problem-sets/994805342720868352/problems/994805446102073344 Given a string, you ar ...
- PHP对象的复制
对象的复制(克隆) $obj1 = new A(); $obj1->p1 = 11; $obj2 = $obj1; //值传递 //则,现在有几个对象?——1个对象! 当然: $obj3 ...
- 【.Net】C#获取Windows系统特殊文件夹的路径
系统特殊文件夹是包含公共信息的文件夹,如“Program Files”.“Programs”.“System”或“Startup”.特殊文件夹在默认情况下由系统设置,或者由用户在安装 Windows ...
- HDU4767_Sum Of Gcd
通过一个题目,学到了很多. 题意为给你n个数,每次询问i,j,答案为i,j间任取两数所有的取法gcd的和. 假设我们当前要看看这个区间有多少个数的gcd为x,最最原始的想法都是查询这个区间有多少个数为 ...
- FZU2122_又见LKity
题目是说给你一个替换串和目标串.把一个长串中的所有的替换串替换为目标串而且不递归地替换. 很简单,直接做一次KMP然后直接替换. 注意替换后跳到替换串的尾部. 注意大小写的问题. #include & ...
- stm32中使用#pragma pack(非常有用的字节对齐用法说明)
#pragma pack(4) //按4字节对齐,但实际上由于结构体中单个成员的最大占用字节数为2字节,因此实际还是按2字节对齐 typedef struct { char buf[3];//bu ...
- HDU2460-Network
题目 给一个\(n\)个点\(m\)条边的无向连通图,\(Q\)次往图中加边,每次加边后问图中的桥有多少个.(加边后边留着). \(n\le 10^5,m\le 2\times 10^5,Q\le 1 ...
- Day 2 笔记 数据结构
Day 2 笔记 数据结构 1.栈.队列.链表等数据结构都是线性数据结构 2.树状数据结构:二叉堆,线段树,树状数组,并查集,st表... 优先队列其实与二叉堆的存储方式并不相同. 一.二叉堆 1.二 ...