机器学习/sklearn 笔记:K-means,kmeans++,MiniBatchKMeans

news2024/10/1 9:32:56

1  K-means介绍

1.0 方法介绍

  • KMeans算法通过尝试将样本分成n个方差相等的组来聚类,该算法要求指定群集的数量。它适用于大量样本,并已在许多不同领域的广泛应用领域中使用。
  • KMeans算法将一组样本分成不相交的簇,每个簇由簇中样本的平均值描述。这些平均值通常称为簇的“质心”;
    • 注意,质心通常不是样本点,尽管它们存在于相同的空间中。

  • KMeans算法旨在选择最小化惯性或称为群内平方和标准的质心:

1.1 惯性的缺点

  • 惯性可以被认为是衡量簇内部一致性的一种度量。它有各种缺点:
    • 惯性假设簇是凸形的和各向同性的,但这不总是情况。
      • 对于拉长的簇或形状不规则的流形反应不佳
    • 惯性不是一个规范化的度量:
      • 我们只知道较低的值更好,零是最优的。但是在非常高维的空间中,欧几里得距离往往会变得膨胀(这是所谓的“维数诅咒”的一个实例)。
      • ——>在k均值聚类之前运行一个降维算法,如主成分分析(PCA),可以缓解这个问题并加快计算速度。
  • 以下是几个K-means效果不加的例子:
      • clusters的数量不是最优
      • 各向异性的cluster分布
      • 方差不同
      • 各个簇数量不同

1.2 Kmeans算法的步骤

  • K均值算法通常被称为劳埃德算法(Lloyd's algorithm)。简单来说,该算法有三个步骤
    • 第一步选择初始质心,最基本的方法是从数据集中选择样本
    • 初始化之后,K均值算法由两个步骤的循环组成
      • 第一个步骤是将每个样本分配给最近的质心
      • 第二步是通过取分配给每个前一个质心的所有样本的平均值来创建新的质心
      • 计算旧质心和新质心之间的差异,并重复这最后两个步骤,直到这个值小于一个阈值(直到质心不再有显著移动为止)
  • K均值算法等同于期望最大化算法,带有一个小的、全相等的、对角线协方差矩阵

  • 给定足够的时间,K均值总会收敛,但这可能是到一个局部最小值
    • 这在很大程度上取决于质心的初始化
    • 因此,计算通常会进行多次,质心的初始化也各不相同
    • 一个帮助解决这个问题的方法是k-means++初始化方案(init='k-means++')
      • 这样初始化质心通常会相互远离,导致比随机初始化更好的结果

2 sklearn.cluster.KMeans

sklearn.cluster.KMeans(
    n_clusters=8, 
    *, 
    init='k-means++', 
    n_init='warn', 
    max_iter=300, 
    tol=0.0001, 
    verbose=0, 
    random_state=None, 
    copy_x=True, 
    algorithm='lloyd')

2.1 主要参数

n_clusters簇的数量
init
  • {‘k-means++’, ‘random’}或形状为(n_clusters, n_features)的数组,默认为'k-means++' 初始化方法
    • ‘k-means++’:使用基于点对总惯性贡献的经验概率分布的采样来选择初始簇质心。这种技术加快了收敛速度
      • 这里实现的算法是“贪婪k-means++”。它与普通的k-means++的不同之处在于,每个采样步骤进行多次尝试,并从中选择最佳质心
    • ‘random’:从数据中随机选择n_clusters个观测(行)作为初始质心
    • 数组:形状应为(n_clusters, n_features),并给出初始中心
n_init
  • 'auto'或int,默认值为10
  • k-means算法运行的次数,每次都使用不同的质心种子
  • 最终结果是n_init连续运行中惯性最佳的输出。
  • 当n_init='auto'时,运行次数取决于init的值:
    • 如果使用init='random',则为10
    • 如果使用init='k-means++'或init是类数组的,则为1
max_iter
  • int,默认值为300
  • k-means算法单次运行的最大迭代次数
tol两次连续迭代的簇中心的Frobenius范数差异来声明收敛的相对容忍度

2.2 举例

from sklearn.cluster import KMeans
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

kmeans=KMeans(n_clusters=2,n_init='auto').fit(X)

2.2.1 属性

cluster_centers_

簇中心的坐标

labels_

每个点的标签

inertia_

样本到最近簇中心的平方距离之和,如果提供了样本权重,则按样本权重加权

n_iter_

运行的迭代次数

2.2.2 fit


fit(X, sample_weight=None)

 sample_weight 是X中每个观测的权重。如果为None,则所有观测都被赋予相等的权重

3 sklearn.cluster.kmeans_plusplus

类似于使用k_means++来进行

sklearn.cluster.kmeans_plusplus(X, n_clusters, *, sample_weight=None, x_squared_norms=None, random_state=None, n_local_trials=None)
X

用来选择初始种子的数据

(也就是KMeans里面fit的内容)

n_cluster要初始化的质心数量
sample_weightX中每个观测的权重

3.1 返回值:

centers:形状为(n_clusters, n_features) ,k-means的初始中心。

indices:形状为(n_clusters,) 在数据数组X中选择的中心的索引位置。对于给定的索引和中心,X[index] = center

3.2 举例

from sklearn.cluster import kmeans_plusplus
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

kmeans_plusplus(X,n_clusters=2)
'''
(array([[10,  0],
        [ 1,  4]]),
 array([5, 1]))
'''

4 Mini Batch K-Means

  • MiniBatchKMeans是KMeans算法的一个变种,它使用小批量(mini-batches)来减少计算时间,同时仍然试图优化相同的目标函数
    • 小批量是输入数据的子集,在每次训练迭代中随机采样
    • 这些小批量大大减少了收敛到局部解所需的计算量
    • 与其他减少k-means收敛时间的算法不同,mini-batch k-means产生的结果通常只比标准算法稍差
  • 该算法在两个主要步骤之间迭代,类似于传统的k-means算法
    • 在第一步中,从数据集中随机抽取样本,形成一个小批量.然后,这些样本被分配到最近的质心
    • 在第二步中,更新质心。与k-means不同,这是按样本进行的
      • 对于小批量中的每个样本,通过取样本及其之前分配到该质心的所有样本的流式平均值来更新分配的质心。
      • 这样做的效果是随着时间的推移减少质心变化的速率。
    • 这些步骤执行直到收敛或达到预定的迭代次数为止
  • MiniBatchKMeans比KMeans收敛得更快,但结果的质量有所降低

4.1 sklearn.cluster.MiniBatchKMeans

class sklearn.cluster.MiniBatchKMeans(
    n_clusters=8, 
    *, 
    init='k-means++', 
    max_iter=100, 
    batch_size=1024, 
    verbose=0, 
    compute_labels=True, 
    random_state=None, 
    tol=0.0, 
    max_no_improvement=10, 
    init_size=None, 
    n_init='warn', 
    reassignment_ratio=0.01)

4.1.1 主要参数

n_clusters簇的数量
init
  • {‘k-means++’, ‘random’}或形状为(n_clusters, n_features)的数组,默认为'k-means++' 初始化方法
    • ‘k-means++’:使用基于点对总惯性贡献的经验概率分布的采样来选择初始簇质心。这种技术加快了收敛速度
      • 这里实现的算法是“贪婪k-means++”。它与普通的k-means++的不同之处在于,每个采样步骤进行多次尝试,并从中选择最佳质心
    • ‘random’:从数据中随机选择n_clusters个观测(行)作为初始质心
    • 数组:形状应为(n_clusters, n_features),并给出初始中心
max_iter
  • int,默认值为300
  • k-means算法单次运行的最大迭代次数
batch_sizemini batch的大小,默认是1024
n_init
  • 'auto'或int,默认值为3
  • k-means算法运行的次数,每次都使用不同的质心种子
  • 最终结果是n_init连续运行中惯性最佳的输出。
  • 当n_init='auto'时,运行次数取决于init的值:
    • 如果使用init='random',则为3
    • 如果使用init='k-means++'或init是类数组的,则为1

 4.1.2 属性

还是那些:cluster_centers,labels_,inertia_,n_iter_,n_steps

4.1.3 方法

方法上fit,tranform,predict这些都有,多了一个partial_fit,表示使用一个mini-batch的样本

4.2 举例

from sklearn.cluster import MiniBatchKMeans
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

mini_kmeans=MiniBatchKMeans(n_clusters=2).fit(X)

mini_kmeans.cluster_centers_
'''
array([[ 1.        ,  2.57142857],
       [10.        ,  2.        ]])
'''

mini_kmeans.labels_
#array([0, 0, 0, 1, 1, 1])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1241711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好用的局域网监控软件推荐

局域网监控软件是一种用于监控局域网内计算机使用情况的软件,可以帮助企业管理者更好地了解员工的工作状态和行为,规范上网行为并保护企业网络资源。 一、域之盾软件 这是一款专业的上网监控软件,它支持多种操作系统和平台,可以全…

【STM32外设系列】GPS定位模块(ATGM336H)

🎀 文章作者:二土电子 🌸 关注公众号获取更多资料! 🐸 期待大家一起学习交流! 文章目录 一、GPS模块简介二、使用方法2.1 引脚介绍2.2 数据帧介绍2.3 关于不同的启动方式 三、前置知识3.1 strstr函数3.2…

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题,让文件可以正常运行

Mac下载的软件显示文件已损坏,如何解决文件已损坏问题,让文件可以正常运行 设备/引擎:Mac(11.6)/Mac Mini 开发工具:终端 开发需求:让显示已损坏的文件顺利安装到电脑 大家肯定都遇到过下载…

脸爱云一脸通智慧管理平台未授权访问

声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、漏洞概述 脸爱云一脸通智慧管理平台存在严重漏洞,允许…

短视频矩阵系统源码搭建部署分享

一、 短视频矩阵系统源码搭建部署分享 目录 一、 短视频矩阵系统源码搭建部署分享 二、短视频矩阵系统搭建功能设计 三、 抖音矩阵号矩阵系统功能设计原则 四、 短视频矩阵开发部分源码展示 很高兴能够帮助您,以下是短视频矩阵系统源码搭建部署分享&#xff1a…

SpringBoot:异步任务基础与源码剖析

官网文档:How To Do Async in Spring | Baeldung。 Async注解 Spring框架基于Async注解提供了对异步执行流程的支持。 最简单的例子是:使用Async注解修饰一个方法,那么这个方法将在一个单独的线程中被执行,即:从同步执…

项目总体测试计划书

目的:编写此测试方案的目的在于明确测试内容、测试环境、测试人员、测试工作进度计划等,以保证测试工作能够在有序的计划安排进行。 测试目标:确保XXX项目的需求分析说明书中的所有功能需求都已实现,且能正常运行;确保…

4.22每日一题(累次积分的计算:交换次序)

注:因为 是积不出的函数,所以先不用算,最后发现,出现dx与dy可以相互抵消,即可算出答案

【Linux】xfs文件系统的xfs_info命令

xfs_info命令 ① 查看命令工具自身的版本号 xfs_info -V ② 查看指定XFS设备的详细信息 xfs_info <device_name> 其他的一些命令可以使用man xfs_info去查阅man手册&#xff1a;

信息系统的安全保护等级的五个级别

信息系统的安全保护等级分为五级&#xff1a;第一级为自主保护级、第二级为指导保护级、第三级为监督保护级、第四级为强制保护级、第五级为专控保护级。 法律依据&#xff1a;《信息安全等级保护管理办法》第四条 信息系统的安全保护等级分为以下五级&#xff1a;   &#…

nginx国密ssl测试

文章目录 文件准备编译部署nginx申请国密数字证书配置证书并测试 文件准备 下载文件并上传到服务器&#xff0c;这里使用centos 7.8 本文涉及的程序文件已打包可以直接下载。 点击下载 下载国密版openssl https://www.gmssl.cn/gmssl/index.jsp 下载稳定版nginx http://n…

微服务知识小结

1. SOA、分布式、微服务之间有什么关系和区别&#xff1f; 1.分布式架构指将单体架构中的各个部分拆分&#xff0c;然后部署到不同的机器或进程中去&#xff0c;SOA和微服务基本上都是分布式架构的 2. SOA是一种面向服务的架构&#xff0c;系统的所有服务都注册在总线上&#…

曲率半径的推导

参考文章 参考文章

Leetcode1410. HTML 实体解析器

Every day a Leetcode 题目来源&#xff1a;1410. HTML 实体解析器 解法1&#xff1a;模拟 遍历字符串 text&#xff0c;每次遇到 ’&‘&#xff0c;就判断以下情况&#xff1a; 双引号&#xff1a;字符实体为 &quot; &#xff0c;对应的字符是 " 。单引号&a…

kubernetes 部署 spinnaker

spinnaker简介 Spinnaker 是一个开源、多云持续交付平台&#xff0c;它将强大而灵活的管道管理系统与主要云提供商的集成相结合。Spinnaker 提供应用程序管理和部署&#xff0c;帮助您快速、自信地发布软件变更。 Spinnaker 提供了两组核心的功能&#xff1a; 应用管理与应用程…

Windows日常故障自我排查:用工具eventvwr.msc(事件查看器)分析问题故障

windows故障排查方法一&#xff1a; 工具用法 系统故障问题时&#xff0c;找不到解决方法 首先&#xff0c; 在搜索栏输入&#xff1a; 事件查看器(eventvwr.msc) 打开程序 根据程序找到程序运行的LOG 根据程序Operational筛选出错误日志&#xff1a; 日志中找错误原因&…

专注短视频账号矩阵系统源头开发---saas工具

专注短视频账号矩阵系统源头开发---saas营销化工具&#xff0c;目前我们作为一家纯技术开发团队目前已经专注打磨开发这套系统企业版/线下版两个版本的saas营销拓客工具已经3年了&#xff0c;本套系统逻辑主要是从ai智能批量剪辑、账号矩阵全托管发布、私信触单收录、文案ai智能…

微信小程序使用腾讯地图实现地点搜索并且随着地图的滑动加载滑动到区域的地点,本文地点使用医院关键词作为搜索地点

实现效果如下 1.页面加载时&#xff0c;根据getLocation方法获取用户当前经纬度获取20条医院位置信息 2.页面滑动时&#xff0c;根据滑动到的经纬度再次获取20条医院位置信息 获取到的医院位置信息 实现方法如下 1.在.wxml中添加触发滑动的方法bindregiοnchange“onMapRegio…

2023亚太赛B题详细讲解 玻璃温室中的微气候

Problem B Microclimate Regulation in Glass Greenhouses 问题B玻璃温室中的微气候法规 温室作物的产量受到各种气候因素的影响&#xff0c;包括温度、湿度和风速[1]。其中&#xff0c;适宜的温度和风速是植物生长[2]的关键。为了调节玻璃温室内的温度、风速等气候因素&…