美文网首页
ML 无监督学习 聚类 K-Means

ML 无监督学习 聚类 K-Means

作者: XinY_VV | 来源:发表于2020-03-31 22:15 被阅读0次
    无监督学习(unsupervised learning)

    在无监督学习中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。

    聚类(clustering)

    聚类算法的目标是将数据集合分成若干簇,使得同一簇内的数据点相似度尽可能大,而不同簇间的数据点相似度尽可能小。

    聚类要求
    k-均值算法(k-means)---基于原型的聚类

    K-Means算法是一种较典型的逐点修改迭代的动态聚类算法

    1.首先从d维空间中选择k个数据点作为初始聚类的均值(中心)/簇
    2.计算每个数据点到这些聚类中心的距离,然后把各个数据点分配给离它最近的那个聚类
    3.如果所有数据点都不再被重新分配,难么就停止并保持现有聚类
    4.如果仍有数据点被重新分配,则重新计算均值,并返回到第2步

    由于每次都要计算所有的样本与每一个质心之间的距离,因此在大规模的数据集上,K-Means算法的收敛速度比较慢。

    最优的聚类结果需要符合以 下两个假设
    1.“簇中心点”(cluster center)是属于该簇的所有数据点坐标的算术平均值。

    1. 一个簇的每个点到该簇中心点的距离,比到其他簇中心点的距离短。

    k=2 N=14

    k-means

    k=3


    一种用于度量聚类效果的指标是SSE(SumofSquaredError,误差平方和),SSE值越小表示数据点越接近它们的质心,聚类效果也越好。因此建议对数据进行标准化以使其平均值为零,标准差为1。

    K-Means算法的局限性

    1.聚类中心的个数K需要事先指定
    2.由于kmeans算法可能停留在局部最优而不收敛于全局最优,在使用K-Means算法进行聚类之前,需要初始化K个聚类中心

    解决方法
    1.选择尽可能远离的点

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    
    # Generating 100 data points and divide them into 2 groups
    X= -2 * np.random.rand(100,2)
    X1 = 1 + 2 * np.random.rand(50,2)
    X[50:100, :] = X1
    plt.scatter(X[ : , 0], X[ :, 1], s = 50, c = 'b')
    plt.show()
    
    
    from sklearn.cluster import KMeans
    Kmean = KMeans(n_clusters=2)
    Kmean.fit(X)
    
    # Finding the center of the clusters
    print(Kmean.cluster_centers_)
    
    plt.scatter(X[ : , 0], X[ : , 1], s =50, c='b')
    plt.scatter(-0.94665068, -0.97138368, s=200, c='g', marker='s')
    plt.scatter(2.01559419, 2.02597093, s=200, c='r', marker='s')
    plt.show()
    
    # Getting the labels
    print(Kmean.labels_)
    
    # Predicting the cluster of a data point
    sample_test=np.array([-3.0,-3.0])
    second_test=sample_test.reshape(1, -1)
    print(Kmean.predict(second_test))
    

    相关文章

      网友评论

          本文标题:ML 无监督学习 聚类 K-Means

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