十大数学科学经典算法(一)
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一。
首先记录一下当python输出需要展示全部列或者行而不是省略号的时候用以下命令
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
1. 1、概述
K-means算法是集简单和经典于一身的基于距离的聚类算法
采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。
该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
1. 2、核心思想
通过迭代寻找k个类簇的一种划分方案,使得用这k个类簇的均值来代表相应各类样本时所得的总体误差最小。
k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。
k-means算法的基础是最小误差平方和准则,
式中,μc(i)表示第i个聚类的均值。
各类簇内的样本越相似,其与该类均值间的误差平方越小,对所有类所得到的误差平方求和,即可验证分为k类时,各聚类是否是最优的。
上式的代价函数无法用解析的方法最小化,只能有迭代的方法。
1. 3、步骤:
(1)适当选择k个类的初始中心;一般是采用随机或猜测的方式初始化类中心,(注:采用随机的方法实现简单,但是族的质量往往比较差,所以有好几种关于中心选取的解决方案,比如先使用层次聚类进行聚类,从层次聚类中提取K个簇,并用这些簇的质心作为初始质心。也有通过使类内总方差最小的方式,选择方差最小的类中心。这篇博客不是讨论算法本身,所以这里就不过多叙述,感兴趣的同学可以去查一些资料。)
(2)对任意一个样本,求其到k个中心的距离,将该样本归到距离最短的中心所在的类;(注:常用的距离度量方法包括:欧几里得距离和余弦相似度。两者都是评定个体间差异的大小的。欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化。余弦相似度倾向给出更优解)
(3)对所有属于该类的数据点求平均,将平均值作为新的类中心;(取平均即向量各维取平均)
(4)重复步骤(2)(3)直到收敛。
该算法的最大优势在于简洁和快速,最重要的是容易实现与可并行。最大的缺陷在于要预先设定聚类数k,选择不当则会导致聚类效果很差。算法的关键在于初始中心的选择和距离公式。
使用scipy中的K-means:
尽 管 K-means 算 法 很 容 易 实 现, 但 我 们 没 有 必 要 自 己 实 现 它。 SciPy 矢 量 量 化 包
scipy.cluster.vq 中有 K-means 的实现,下面是使用方法。
# -*- coding: utf-8 -*-
#导入scipy中K-means的相关工具
from scipy.cluster.vq import *
#randn是NumPy中的一个函数
from numpy import *
from pylab import *
#生成简单的二维数据:生成两类二维正态分布数据。
class1 = 1.5 * randn(100,2)
class2 = randn(100,2) + array([5,5])
features = vstack((class1,class2))
#用 k=2 对这些数据进行聚类:
centroids,variance = kmeans(features,2)
"""
由于 SciPy 中实现的 K-means 会计算若干次(默认为 20 次),并为我们选择方差最
小的结果,所以这里返回的方差并不是我们真正需要的。
"""
#用 SciPy 包中的矢量量化函数对每个数据点进行归类:通过得到的 code ,我们可以检查是否有归类错误
code,distance = vq(features,centroids)
#可视化结果:画出这些数据点及最终的聚类中心:函数 where() 给出每个类的索引
figure()
ndx = where(code==0)[0]
plot(features[ndx,0],features[ndx,1],'*')
ndx = where(code==1)[0]
plot(features[ndx,0],features[ndx,1],'r.')
plot(centroids[:,0],centroids[:,1],'go')
axis('off')
show()

---------------------
作者:MingChaoSun
来源:CSDN
原文:https://blog.csdn.net/sunmc1204953974/article/details/50052099
版权声明:本文为博主原创文章,转载请附上博文链接!
作者:MingChaoSun
来源:CSDN
原文:https://blog.csdn.net/sunmc1204953974/article/details/50052099
版权声明:本文为博主原创文章,转载请附上博文链接!