机器学习之无监督学习---聚类学习

当我们进行机器学习时,无正确分类标签或根本就没有标签的时候,就需要用到无监督学习方法了。
无监督,就是没有标签来监督了,根据数据表现,将数据进行分类,至于分类后的解释,就需要你来寻找了,或者根本就无路可寻,呵呵~。。。
废话少说,开始上菜:
1、KMeans
1)KMeans是聚类经常用的方法,适用于凸函数,例如这样的图形:
机器学习之无监督学习---聚类学习_第1张图片
这样的:
机器学习之无监督学习---聚类学习_第2张图片
后面的几乎就一类了 ,看图好像没什么可分的哈。。。

2)KMeans参数:
sklearn.cluster.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=1,
algorithm=‘auto’
)
参数的意义:

n_clusters:簇的个数,即你想聚成几类
init: 初始簇中心的获取方法
n_init: 获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初始10次质心,实现算法,然后返回最好的结果。
max_iter: 最大迭代次数(因为kmeans算法的实现需要迭代)
tol: 容忍度,即kmeans运行准则收敛的条件
precompute_distances:是否需要提前计算距离,这个参数会在空间和时间之间做权衡,如果是True 会把整个距离矩阵都放到内存中,auto 会默认在数据样本大于featurs*samples 的数量大于12e6 的时候False,False 时核心实现的方法是利用Cpython 来实现的
verbose: 冗长模式(不太懂是啥意思,反正一般不去改默认值)
random_state: 随机生成簇中心的状态条件。
copy_x: 对是否修改数据的一个标记,如果True,即复制了就不会修改数据。bool 在scikit-learn 很多接口中都会有这个参数的,就是是否对输入数据继续copy 操作,以便不修改用户的输入数据。这个要理解Python 的内存机制才会比较清楚。
n_jobs: 并行设置
algorithm: kmeans的实现算法,有:‘auto’, ‘full’, ‘elkan’, 其中 'full’表示用EM方式实现
PS:参数部分是我引用的,百度一下,可以看到一大堆解释,不做详细介绍。

3)下面就是模型训练了,直接 引用sklearn里的模块:

k = 4 #聚类的类别,必须指定,是KMean的缺点之一
from sklearn.cluster import KMeans
model = KMeans(n_clusters = k,init='k-means++', max_iter = 20000) 
model.fit(X_train) #开始聚类
label = pd.Series(model.labels_)#获取标签,有时候格式会有问题,这里我转换为了Series,方便后期指标的评估
y_pre=model.predict(X_test)#为测试集进行预测

是不是很简单
4)指标评估:
轮廓系数:

score_scaled = metrics.silhouette_score(X_train,label)#越大说明效果越好
print("轮廓系数",score_scaled)

若你有正确的分类,还可以看看聚类训练的分类结果和真实分类之间的差距:

  def Index_model(y_train,label):
    '''
    兰德指数
    '''
    ARI=metrics.adjusted_rand_score(y_train, label)  #越大,聚类结果越吻合
    print("兰德指数:",ARI)
    '''
    互信息
    '''
    AMI=metrics.adjusted_mutual_info_score(y_train, label)   
    print("互信息",AMI)#越大越吻合
    '''
    同质性homogeneity
    '''
    ho=metrics.homogeneity_score(y_train, label)  
    print("同质性homogeneity",ho)
    '''
    完整性completeness
    '''
    co=metrics.completeness_score(y_train, label)
    print("完整性completeness",co)
    '''
    前面两者的调和平均V-measure
    '''
    Vm=metrics.v_measure_score(y_train, label)
    print("同质和完整性的调和平均",Vm)
    '''
    Fowlkes-Mallows scores
    '''
    FMS=metrics.fowlkes_mallows_score(y_train, label)
    print("Fowlkes-Mallows scores",FMS)

今天就写到这,有时间更新其他聚类方法,对你有用的话,记得赞一下哦

你可能感兴趣的:(机器学习,KMeans,聚类,评估指标)