这是一次数据实验。基于七月算法邹博讲义和scikit-lean官网。
聚类:就是对大量未知标注的数据集,按数据的内在相似性将数据划分为多个类别,使得类别内的数据相似性较大而类别间的相似性较小。
1 k-means算法
参数:聚类的数目
描述:k-means将 包含N个样本量的数据集X,分到不相交的聚类C中。每个聚类由样本的平均值决定,通常这个平均值被称为质心(中心点)。k-means算法就是要寻找质心,使得簇内平方和最小。k-均值通常被称为劳埃德算法。
∑ni=0minμj∈c(∥∥μj−xi∥∥)2
步骤:假定输入样本
X=x1,x2,x3...xn
,输入聚类数目k。
1 选择初始的k个类别中心
μ1,μ2,...μk
。
2 对于每个样本
xi
,将其标记为距离类别中心最近的类别,
labeli=argmin1≤j≤k||xi−μj||
3 将每个类别中心更新为 所有属于这个类别的样本的均值
μj=1|Cj|∑i∈Cjxi
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文本聚类