“ 这篇文章尝试借用数据离散化这个事给大家讲明白K-Means算法的含义。”
01
—
数据离散化
数据离散化是数据预处理的一个非常重要的步骤,就是将连续的数据分成几个段。
举个简单例子,好比我们一个班上的学生成绩是从0-·100分之间的,但是我们在进行数据分析的时候呢我们把这些分数分成不及格、及格、良好、优秀四大类,实际上就是将比较连续的分数给离散化成了4种可能取值。
那这样做有什么好处呢?
02
—
数据离散化的意义
一些数据挖掘算法中(比如Apriori算法),要求数据是分类属性形式。因此,就需要在数据预处理阶段将连续属性的数给它离散化,除此之外离散化还具有以下好处:
当然,一切都还是看业务需要。
03
—
常用的数据离散化方法
离散化的工作很容易理解,就是依照一定规律把写数据给分成少数的几类。那这个规律是什么呢?
常用的离散化方法有:
我们重点研究一下K-Means算法。
04
—
K-Means算法
聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。
为什么这么说呢?就像最前面那个成绩聚类的例子,我们以60分为界限划分及格和不及格,那60分的同学真的就比59分的同学优秀么?其实他们可能根本就是一类人。
所以,我们希望能有算法将这些数据更科学的离散化,就是让类和类之间的区分更大,不再残忍地把59.5和60给分割成不同的两个世界。
05
—
算法理解
K-Means 算法简单说,就是一个do-while循环。
伪代码如下:
选择K个点作为初始质心
repeat
将每个点指派到最近的质心,形成K个簇
重新计算每个簇的质心
until 簇不发生变化或达到最大迭代次数
上面伪代码几句话虽然少,但是对K-Means算法对描述已经很透了。
我们通过一个具体的例子来理解一下。大家想象一下,假设操场上有20个学生随机地站在那不动,我们想把他们分成5组,用K-Means算法该怎么分呢?
从上面两个小结的描述可以看出来,K-Means算法的关键有三点:(1)我们怎么知道要分几类?也就是说这个K是怎么确定的?(2)K确定了后,怎样确定K个初始的中心点呢?(3)各个点到中心点的距离是怎么算的呢?
06
—
小结
本文概要讲了数据离散化和K-Means算法的理论基础。
数据离散化其实是将很紧密的、取值可能性很多的数给分组,让每个点的可能取值变少,就像0-100分的可能的成绩取值给离散化成:不及格、及格、良好、优秀这四种可能取值。比如模数转换。
K-Means聚类关键就是3条:K值、中心点、距离。
具体的Python实现方法,请期待下一篇文章。