美文网首页机器学习
聚类算法K-MEANS

聚类算法K-MEANS

作者: taon | 来源:发表于2019-06-23 20:14 被阅读0次

    这一节我们来讨论下聚类算法,聚类属于无监督问题,给出的数据没有标签值,需要机器算法自行去探索其中的规律,根据该规律将相近的数据划分为一类。
    聚类算法理解起来非常容易,没有数学公式的推导。我们用下图来做个简单的说明,原始数据是没有颜色的,我们通过聚类算法将相近的数据分成了三类,并标记了三种颜色。

    cluster.png
    1.K-MEANS算法的基本概念
    1.指定簇的个数,需要指定K值,k-means会根据指定的k值将数据分为k类。实际代码:km = KMeans(n_clusters = 3),代码中的3就是我们指定的k值。
    2.质心:均值,所有数据点各向量的平均值,类似于高中物理中的重心的概念。
    3.距离度量:计算每个数据点距离质心的距离。
    2.K-MEANS工作流程简单介绍
    我们用下图来对K-Means算法做一个简单的说明。首先,对于一个数据集,我们先随机给出两个质心,然后我们计算每个数据点距离两个质心的距离d1,d2,然后比较的d1,d2的大小,哪个值小,数据点就属于哪一类。其次,我们对第一次分类完的数据再次更新其质心(各数据点各维度的均值),再重复第一步的距离计算与比较过程,经过多次的迭代,最终我们就可以将数据分为2类。
    kmeans data process.png
    3.K-MEANS算法的优缺点
    优点:
    理解简单,执行速度快,只需要指定n_clusters参数就可以了,适合常规数据集。
    缺点:
    没有标签值,模型效果难以评估,所以很难确定分多少簇效果较好。
    复杂度与样本呈线性关系,很难发现任意形状的簇。如下图,这种形状数据集难以分类。
    difficult to split.png
    4.K-MEANS算法API文档简介
    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=None, 
    algorithm=’auto’)
    

    关键参数说明:
    n_clusters:数据集要切分的类别数量,整型值,默认为8.
    K-MEANS算法样例演示

    import numpy as np
    from sklearn.cluster import KMeans
    
    #随机构造部分数据
    X = np.array([[1,6],[2,4],[7,2],[8,5],[9,3],[5,3]])
    #构建模型
    km = KMeans(n_clusters=2).fit(X)
    #查看kmeans的分类结果
    km.labels_
    [1, 1, 0, 0, 0, 0]
    #查看数据集的质心点位置
    km.cluster_centers_
    [[7.25, 3.25],
     [1.5 , 5.  ]]
    
    #使用km模型对未知数据集进行预测
    km.predict([[3,9]])
    [1]
    

    相关文章

      网友评论

        本文标题:聚类算法K-MEANS

        本文链接:https://www.haomeiwen.com/subject/ovxwqctx.html