姜鹏辉的个人博客 GreyNius

【ML】使用sklearn进行聚类

2020-03-30

KMeans

介绍

 KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001,   
         precompute_distances='auto', verbose=0, random_state=None,  
         copy_x=True, n_jobs=None, algorithm='auto')

参数|说明 –|– n-cluster|分类簇的数量 max_iter|最大的迭代次数 n_init|算法的运行次数 init|接收待定的string。kmeans++表示该初始化策略选择的初始均值向量之间都距离比较远,它的效果较好;random表示从数据中随机选择K个样本最为初始均值向量;或者提供一个数组,数组的形状为(n_cluster,n_features),该数组作为初始均值向量。 precompute_distance|接收Boolean或者auto。表示是否提前计算好样本之间的距离,auto表示如果nsamples*n>12 million,则不提前计算。 tol|接收float,表示算法收敛的阈值。 N_jobs|表示任务使用CPU数量 random_state|表示随机数生成器的种子。 verbose|0表示不输出日志信息;1表示每隔一段时间打印一次日志信息。如果大于1,打印次数频繁。

使用

kmeans_model = KMeans(n_clusters=6, random_state=1).fit(X)

评估聚合效果

方法 真实值 最佳值 sklearn函数
ARI(兰德系数) 需要 1.0 adjusted_rand_score
AMI(互信息) 需要 1.0 adjusted_mutual_info_score
V-measure 需要 1.0 completeness_score
FMI 需要 1.0 fowlkes_mallows_score
轮廓系数 不需要 畸变程度大 silhouette_score
Calinski_ Harabaz 不需要 最大值 calinski_harabaz_score

轮廓系数

labels = kmeans_model.labels_
metrics.silhouette_score(new_arr, labels, metric='euclidean')

聚类结果可视化

TSNE是一个数据可视化的工具,可以将高维数据降到2-3维

import pandas as pd
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
tsne=TSNE(n_components=2,init='random',random_state=177).fit(iris_data)
df=pd.DataFrame(tsne.embedding_)
df['labels']=kmeans.labels_
df1=df[df['labels']==0]
df2=df[df['labels']==1]
df3=df[df['labels']==2]
fig=plt.figure(figsize=(9,6))
plt.plot(df1[0],df1[1],'bo',df2[0],df2[1],'r*',df3[0],df3[1],'gD')
plt.show()


参考

sklearn—kmeans参数、及案例(数据+代码+结果)


Comments

Content