今天给大家介绍一个数据挖掘中的简单的聚类(Clustering)算法kmeans,什么是“聚类”?举个简单例子,比如说有一堆电商企业的用户数据,记录着用户的各种身份信息和交易信息,如姓名、性别、买东什么东西,用户标签等等。那么在这么多用户中,事实上存在一批相似的用户的,什么叫“相似”呢?其实这里的相似是自己定义的,比如我可以定义如果用户购买的东西相似,那么用户就相似。于是我们想把相似的用户都找出来,聚成若干个类(cluster),使得每个类中的用户尽量相似,每个类之间的用户尽量不相似。找出这些类有什么用呢?用处大了,比如我可以知道这群人的购物习惯比较相似,那么推荐系统推荐商品的时候就可以参考。再比如有些搜索引擎有“查看相似网页”的功能,这个就可以用聚类来做,把网页就行聚类,在聚类的结果中,每一个类中的网页看成是相似的。
下面来说说kmeans是怎么做Clustering的,kmeans有以下几个步骤:
(1) 设定聚类个数,选定类初始中心点。
(2) 把每个点归类到离它最近的类中心点所属的类。
(3) 重新计算新的类中心点。
(4) 重复(2)直到收敛。
是不是听着很抽象?我们来看一个简单例子。假设我们现在有6个数据点,每个数据点5维:
Pt1=(1,2,0,0,2)
Pt2=(2,1,3,4,2)
Pt3=(3,2,1,0,3)
Pt4=(1,3,0,0,3)
Pt5=(3,0,3,4,0)
Pt6=(1,2,2,4,0)
kmeans算法要求指定聚类的个数及每个类的初始中心点,也就是说,你必须告诉它,你要把这堆数据聚成几类,kmeans这个名字中的k就是指类个数,并且在刚开始的时候,你要为每个类指定一个中心点来代表这个类。可能有人会问,我怎么能事先知道数据中大概有几类?以及初始中心点怎么选?这个问题问得很好,关于聚类个数的自动确定,以及初始中心点的自动选取,有专门的研究,这里不讨论这个问题,这里说的是最原始的kmeans~
聚类个数的k:这个例子中,我们把k设为2。