美文网首页数据挖掘与机器学习
十大数据挖掘算法之K-Means

十大数据挖掘算法之K-Means

作者: 清梦载星河 | 来源:发表于2019-10-13 20:50 被阅读0次

    一、K-Means聚类

    1.1 大致概念

    K-Means聚类,又称为K均值聚类,是一种常用的聚类算法,且为典型的基于距离的聚类算法,属于无监督学习。其中,K均值是基于原型的、划分的距离技术,它试图发现用户指定个数的簇。其以欧氏距离作为相似度测试。

    1.2 主要的聚类过程

    1. 猜测一些簇中心点的位置;
    2. 重复至收敛。

    1.3 K-Means聚类的注意事项

    • 簇数量需要先给定再聚类;
    • 不适用于非线性边界;
    • 数据量大的时候计算较慢。

    1.4 K-Means聚类的优缺点

    优点

    1. K-均值算法是解决聚类算法的一种经典算法,算法容易实现,简单而快速;
    2. 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是 O(nkt) ,
      其中 n 是所有对象的数目 k 是簇的数目,t 是迭代的次数。通常 k<<n。这个算法经常以局部
      最优结束。
    3. 算法尝试找出使平方误差函数值最小的 k 个划分。当簇是密集的、球状或团状的,而簇
      与簇之间区别明显时,它的聚类效果很好。

    缺点

    1. k-均值只有在簇的平均值被定义的情况下才能使用,不适用于某些应用, 如涉及有
      分类属性的数据不适用。
    2. 要求使用者必须事先给出要生成的簇的数目 k。
    3. 对初值敏感,对于不同的初始值,可能会导致不同的聚类结果。
    4. 不适合于发现非凸面形状的簇,或者大小差别很大的簇。
    5. 对于"噪声"和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

    二、Python实现

    2.1 Talk is cheap, show me the code.

    • sklearn.cluster.KMeans
    # 运行于Jupyter Notebook
    %matplotlib inline
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 创建数据
    from sklearn.datasets.samples_generator import make_blobs
    # make_blobs 为聚类数据生成器
    
    #x是一个shape为(300,2)的二维numpy.ndarray
    #y_true是shape为(300,)的一维ienumpy.ndarray
    x,y_true = make_blobs(n_samples = 300, #生成300条数据
                         centers =4, #四类数据
                         cluster_std=0.5, #方差一致
                         random_state=0)
    
    # 绘制散点图
    plt.rcParams['figure.figsize'] = (16,9)
    plt.scatter(x[:,0],x[:,1],s=10,alpha=0.8)
    plt.grid()
    
    # 创建模型
    from sklearn.cluster import KMeans
    kmeans = KMeans(n_clusters=4)
    kmeans.fit(x)
    y_kmeans = kmeans.predict(x)
    
    # 画出簇中心点
    plt.scatter(x[:,0],x[:,1],c=y_kmeans,s=50,cmap='viridis')
    
    # centers为簇中心点的数据
    centers = kmeans.cluster_centers_
    plt.scatter(centers[:,0],centers[:,1],c='red',s=200,alpha=0.5)
    
    创建数据 画出簇中心点

    三、sklearn.cluster.KMeans

    class sklearn.cluster.KMeans(
        n_clusters=8, # 聚类中心的数目,默认为8
        init=’k-means++’, # 聚类的初始化方案,{‘k-means++’, ‘random’ or an ndarray}
        n_init=10, # kmeans随机运行次数
        max_iter=300, # 算法运行的最大迭代次数
        tol=0.0001, # 与inertia属性结合确定收敛条件
        precompute_distances=’auto’, # 是否将数据全部放入内存,{‘auto’, True, False}
        verbose=0, # 是否输出详细信息,int, default 0
        random_state=None, # 用于随机产生中心的随机序列
        copy_x=True, # 是否直接在原矩阵上进行计算。默认为True,会copy一份进行计算。
        n_jobs=None, # 同时进行计算的核数(并发数)
        algorithm=’auto’ # 可选的K-means距离计算算法,{“auto”, “full” or “elkan”, default=”auto”}
        )
    

    3.1 属性

    属性名 解释
    cluster_centers_ 聚类中心的坐标
    labels_ 每个点的分类标签
    inertia_ 样本到最近聚类中心的距离平方和
    n_iter_ 算法运行时的迭代次数

    3.2 方法

    方法名 解释
    fit() 训练模型
    fit_predict()
    fit_transform()
    get_params() 获得模型的参数
    predict()
    score() 计算模型误差
    set_params()
    transform() 转换训练数据为群集距离空间

    相关文章

      网友评论

        本文标题:十大数据挖掘算法之K-Means

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