使用scikit中的聚类

来源:互联网 发布:java文件流转文件 编辑:程序博客网 时间:2024/06/15 13:06

这是一次数据实验。基于七月算法邹博讲义和scikit-lean官网。

聚类:就是对大量未知标注的数据集,按数据的内在相似性将数据划分为多个类别,使得类别内的数据相似性较大而类别间的相似性较小。

1 k-means算法
 参数:聚类的数目
 描述:k-means将 包含N个样本量的数据集X,分到不相交的聚类C中。每个聚类由样本的平均值决定,通常这个平均值被称为质心(中心点)。k-means算法就是要寻找质心,使得簇内平方和最小。k-均值通常被称为劳埃德算法。
ni=0minμjc(μjxi)2
 步骤:假定输入样本X=x1,x2,x3...xn,输入聚类数目k。
 1 选择初始的k个类别中心μ1,μ2,...μk
 2 对于每个样本xi,将其标记为距离类别中心最近的类别,labeli=argmin1jk||xiμj||
 3 将每个类别中心更新为 所有属于这个类别的样本的均值μj=1|Cj|iCjxi
 4 重复步骤2 和 3 ,直到符合退出条件。
 5 退出条件可以是:一定的迭代次数;簇中心变化率;最小平方误差。
 注意:
 0 k-means最后获得的是局部最优解。
 1 前提假设聚类是凸的,并且是同质的(各向同性的)。在遇到细长的形状、不规则流形状的时候是无效的。
 2 衡量数据相似度的计算方法有很多:欧氏距离、杰卡德相似系数、余弦相似度、Pearson相似系数、Hellinger距离等。
 3 高纬度灾难,当样本维数很高的时候,计算量很大,这时候可以先用PCA,之后再调用k-means。
 4 算法效果高度依赖初始簇中心点的选择。在scikit-learn中可以使用k-means++选择质心,这样选择质心相互距离会比较远,好于随机选择。
 5 在scikit-learn有一个参数:n_jobs,可以指定处理器个数。默认值是1;n_jobs=-1,使用所有的处理器;n_jobs=-2,有一个处理器不使用。并行处理在X 系统下会出问题。
 6 对异常点(噪音)的处理能力差。
Mini Batch K-Means
MiniBatchKMeans是KMeans的变种。不同之处是每次从样本集中随机选择一小部分样本进行计算,以减少运行时间。

试验
 1执行iris.data看效果。不同的聚类数目,不同的迭代次数。(我显然理解不了这个效果)。
 2 执行digitsdateset。比较了初始值选用:k-means++,random,pca选择的主成分三种方法的效果。

聚类效果评价
 1 Adjusted Rand index(ARI)
 2 Mutual Information based scores(AMI)
 3 homogeneity
 4 completeness
 5 V-measure
 6 Fowlkes-Mallows scores
 7 Silhouette Coefficient
 8 Calinski-Harabaz Index
继续试验
 1文本聚类

0 0
原创粉丝点击