Kmeans算法

  • 1.算法区别
    • 1.1.无监督学习与聚类算法理论的区别
    • 1.2.聚类和分类算法的区别
  • 2.Kmeans算法原理
    • 2.1算法属性含义
    • 2.2 算法结果预测
    • 2.3 `Kmeans`有损失函数吗?
    • 2.4 优点与缺点
  • 3.距离的衡量
  • 4.代码实现

1.算法区别

1.1.无监督学习与聚类算法理论的区别

  • 有监督学习模型算法

    • 模型需要的样本数据即需要有特征矩阵X,也需要有真实的标签y。
  • 无监督学习模型算法
    • 模型只需要使用特征矩阵X即可,不需要真实的标签y,聚类算法是无监督学习中的代表之一。
  • 聚类算法
    • 将数据划分成有意义或有用的组(或簇)。

1.2.聚类和分类算法的区别

2.Kmeans算法原理

2.1算法属性含义

属性 含义
Kmeans算法将一组N个样本的特征矩阵X划分为K个无交集的簇,直观上看来簇是一个又一个聚集一起的数据,在一个簇中的数据就认为是同一类,簇就是聚类的结果表现
质心 每个簇中所有数据的均值u通常被称为这个簇的"质心"在二维平面中,簇的质心横坐标是横坐标的均值,质心的纵坐标是纵坐标的均值,同理可以推广到高维空间
  • 簇的个数k是一个超参数。

  • 算法迭代过程

    • 随机抽取k个样本作为最初的质心
    • 计算每个样本点与k个质心的距离,将样本点分配到最近的一个质心,生成k个簇
    • 对于每个簇,计算所有被分该簇的样本点的平均值作为新的质心
    • 当质心的位置不再发生变化,迭代结束,聚类完成
    • 如图所示【将数据分成4簇,白色x代表质心】

2.2 算法结果预测

  • Kmeans算法通常不需要预测结果,因为该算法本质上是在对未知分类数据的探索,但是在某些情况下我们可以使用predict进行预测操作
  • 当数据太大的时候预测
    • 不必使用所有的数据寻找质心,少量的数据就可以帮助我们确定质心
    • 数据量非常大时,可以使用部分数据确认质心
    • 剩下的数据的聚类结果,使用predict来调用
  • 当我们不要求那么精确,或者我们的数据量实在太大,可以使用predict方法。如果数据量还行,直接使用fit后调用labels_查看聚类结果

2.3 Kmeans有损失函数吗?

  • 有,Kmeans追求的是,求解能够让簇内平方和最小化的质心。在质心不断变化不断迭代的过程中,整体平方和是越来越小的,当整体平方和最小的时候,质心就不再发生变化了,即求解问题,变成了最优化问题

    • Kmeans中,在一个固定的簇数k下,最小化整体平方和来求解最佳质心,并基于质心的存在去进行聚类,并且,整体距离平方和的最小值可以使用梯度下降来求解,因此有人认为:簇内平方和或整体平方和是Kmeans的损失函数
  • 没有

    • 损失函数本质是用来衡量模型的拟合效果(损失越小,模拟的拟合效果越好),只有有求解参数需求的算法,才会有损失函数,Kmeans不求解参数,它的本质也不是在拟合数据,而是对数据进行一种探索。所以有些人认为:Kmeans不存在损失函数,整体平方和更像是Kmeans的模型评估指标,而非损失函数

2.4 优点与缺点

  • 优点

    • 简单,快速,适合常规数据集
  • 缺点
    • K值难确定
    • 复杂度与样本呈线性关系
    • 很难发现任意形状的簇

3.距离的衡量

  • 聚类算法追求"簇内差异小,簇外差异大"【差异:由样本点到其所在簇的质心的距离来衡量】

  • 同一个簇,所有样本点到质心的距离之和越小,认为簇中的样本越相似,簇内差异就越小

  • 距离的衡量【常用欧几里得距离和余弦相似度(先标准化)】

公式参数 含义
x 每个样本点
u 质心
n 每个样本点中的特征数目
i 组成点的每个特征

  • 簇内平方和

    • 常采用欧几里得距离,一个簇中所有样本点到质心的距离的平方和为簇内平方和。簇内平方和可以表示簇内差异的大小
  • 整体平方和

    • 将一个数据集中所有簇的簇内平方和相加,得到整体平方和(Total Cluster Sum of Square),又叫做total inertiaTotal Inertia越小,代表每个簇内样本越相似,聚类效果就越好

4.代码实现

from sklearn import cluster.KMeansKMeans(n_clusters=8,init='k-means++',n_init=10,max_iter=300,tol=0.0001,precompute_distances='auto',verbase=0,random_state=None,copy_x=True,n_jobs=None,algorthm='auto')
  • 参数

    参数 含义
    n_clusters KMeans中的k,表示模型要分几类,必填参数,默认为8类,通常的聚类结果会是一个小于8的结果,在聚类之前,不知道n_clusters是多少,即要对它进行探索
    random_state 初始化质心的生成器
  • 属性

    属性 含义
    labels_ 查看聚好的类别,每个样本所对应的类
    cluster_centers_ 查看质心坐标
    intertia_ 查看总距离平方和
  • 拿到一个数据集,我们希望能够通过绘图先观察一下这个数据集的数据分布,以此来为我们聚类时输入的n_clusters做一个参考,自己创建一个数据集make_blobs,自己创建的,有标签

    from sklearn.datasets import make_blobs
    import matplotlib.pyplot as plt
    #自己创建数据集,特征维度为2,质心为4,分4类,500个样本
    X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
    color=['red','pink','orange','gray']
    fig,ax1=plt.subplots(1)
    for i in range(4):ax1.scatter(X[y==i,0],X[y==i,1],marker='o',#点的形状s=8,#点的大小c=color[i]  #颜色)plt.show()
    

  • 基于这个分布,使用kmeans,假设数据有3簇

    #假设为3簇
    from sklearn.cluster import KMeans
    from sklearn.datasets import make_blobs
    #自己创建数据集,特征维度为2,质心为4,分4类,500个样本
    X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
    n_clusters = 3
    cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)
    y_pred=cluster.labels_  #重要属性,查看聚好的类别,每个样本所对应的类
    centroid=cluster.cluster_centers_   #重要属性查看质心
    # array([[-8.0807047 , -3.50729701],
    #        [-1.54234022,  4.43517599],
    #        [-7.11207261, -8.09458846]])inertia=cluster.inertia_  #重要属性,查看总距离平方和
    # 1903.4503741659223
    
  • 画图,显示质心

    from sklearn.cluster import KMeans
    from sklearn.datasets import make_blobs
    #自己创建数据集,特征维度为2,质心为4,分4类,500个样本
    X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
    n_clusters = 3
    cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)
    centroid=cluster.cluster_centers_   #重要属性查看质心
    color=['red','pink','orange','gray']
    fig,ax1=plt.subplots(1)
    for i in range(n_clusters):ax1.scatter(X[y_pred==i,0],X[y_pred==i,1],marker='o',s=8,c=color[i])
    ax1.scatter(centroid[:,0],centroid[:,1],marker='x',s=15,c='black')
    plt.show()
    

  • 使用部分数据

    from sklearn.cluster import KMeans
    from sklearn.datasets import make_blobs
    X,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
    n_clusters=3
    cluster=KMeans(n_clusters=n_clusters,random_state=0).fit(X)
    y_pred=cluster.labels_  #重要属性,查看聚好的类别,每个样本所对应的类
    cluster_smallsub=KMeans(n_clusters=n_clusters,random_state=0).fit(X[:200])
    #使用模型对X进行分类预测
    y_pred_ = cluster_smallsub.predict(X)
    (y_pred==y_pred_).sum()
    

无监督学习之Kmeans算法相关推荐

  1. 吴恩达机器学习(十一)K-means(无监督学习、聚类算法)

    目录 0. 前言 1. K-means的算法流程 2. 代价函数(优化目标函数) 3. K 的选择 学习完吴恩达老师机器学习课程的无监督学习,简单的做个笔记.文中部分描述属于个人消化后的理解,仅供参考 ...

  2. 有监督学习和无监督学习_机器学习算法之监督学习和无监督学习比较

    无监督学习和监督学习是机器学习最基本的两种类型,其他的类似于它们的综合.最常用的无监督学习是从样本数据分布中,按它们的聚集来分类.例如,用一堆新旧不同的人民币硬币的尺寸和重量作为样本的数据,分布聚集在 ...

  3. 大概这就是“无监督学习”的机器学习算法实例

    开会时有老大提到,用于智能运维的算法有不少是有监督学习,在一定规则下学习出适用的场景模型. 而我们需要做的"无监督学习"算法,难度则要大不少.对于我们这种算法小白,虽然理解了有监督 ...

  4. 机器学习第六回-无监督学习—— K-均值算法

    K-Means算法过程 K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组. K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其流程为: 选择

  5. apriori算法_机器学习(无监督学习)关联规则Apriori算法原理与python实现

    关联规则Apriori算法 1.关联规则概述 关联规则算法是在一堆数据集中寻找数据之间的某种关联,通过该算法我们可以对数据集做关联分析--在大规模的数据中寻找有趣关系的任务.这些关系可以有两种形式:频 ...

  6. 【机器学习】【无监督学习】【算法01-理论1】Apiori算法-筛选频繁集

    Apriori算法 引用1 Apriori算法是一种用于进行关联分析的算法,在Agrawal 等人提出的1993最初提出的动机是针对购物篮分析问题提出的,其目的是为了发现交易数据库中不同商品之间的联系 ...

  7. 【机器学习入门到精通系列】无监督学习之K-means

    文章目录 1 K-mens聚类 2 优化目标 3 随机初始化 4 选取聚类数量 1 K-mens聚类 随机初始化聚类中心,分成两簇,计算均值,移动聚类中心到均值处,不断迭代.

  8. Machine Learning Algorithms Study Notes(4)—无监督学习(unsupervised learning)

    1    Unsupervised Learning 1.1    k-means clustering algorithm 1.1.1    算法思想 1.1.2    k-means的不足之处 1 ...

  9. K-means算法研究综述

    欢迎关注"程序杂货铺"公众号,里面有精彩内容,欢迎大家收看^_^ K-means算法研究综述 聚类被认为是机器学习中最常使用的技术之一, 它历史悠久.应用广泛,几乎应用于环境学.医 ...

最新文章

  1. pod setup慢的解决方法
  2. React Namespaced Components
  3. c#写的贪吃蛇小游戏
  4. 编程隐藏child指定列_简单的Excel VBA编程问题解答——完美Excel第183周小结
  5. 正则表达式的一些探索(偏JavaScript)
  6. 搞定网页打印自动分页问题
  7. 火狐对ajax的onreadystatechange与IE的不同。
  8. CCF201809-2 买菜
  9. Honeywords项目——检查密码是否被破解的一种简单方法
  10. 一个模拟抛硬币的游戏
  11. laravel 判断字符串包含_Laravel:表单验证字符串长度的错误信息导致的异常
  12. mayapython常用模块_Maya中Python普及教程
  13. Windows聚焦图片不更新解决方法
  14. ppt设置外观样式_幻灯片的外观设置
  15. 华为机试 (10/6)
  16. 【Pygame实战】妈耶~这款经典的《俄罗斯方块儿》竟这么厉害......
  17. MonkeyRunner_MonkeyRunner,MonkeyDevice,MonkeyImage可以调用的方法
  18. php在foreach循环后留下数组的引用问题
  19. 【去雾】|GMAN 去雾
  20. Java 大写金额转换成数字

热门文章

  1. linux 移动 文件,linux移动文件命令
  2. 寒假个人学习心得体会
  3. 使用javascript的网速测试代码
  4. java/php/net/python婚纱摄影网站设计
  5. ​Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果
  6. 国产安卓手机推送问题
  7. 采用路由器应对天猫盒子
  8. 悟空CRM 5.0 升级发布
  9. 中国广州利用区块链及AI技术发布营业执照
  10. Python添加mysql数据:insert_to_db.py