【Python】sklearn中的K-Means聚类

news2024/12/23 20:23:13

文章目录

    • 初步认识
    • 初值选取
    • 小批

初步认识

k-means翻译过来就是K均值聚类算法,其目的是将样本分割为k个簇,而这个k则是KMeans中最重要的参数:n_clusters,默认为8。

下面做一个最简单的聚类

import numpy as np
import matplotlib.pyplot as plt

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

X, y = make_blobs(1500)

fig = plt.figure()
for i in range(2):
    ax = fig.add_subplot(1,2,i+1)
    y = KMeans(i+2).fit_predict(X)
    plt.scatter(X[:, 0], X[:, 1], c=y)

plt.show()

其中,y是聚类结果,其数值表示对应位置X所属类号。

效果如图所示,对于下面这组数据来说,显然最好是分为两类,但如果KMeansn_clusters设为3,那就会聚成3类。

在这里插入图片描述

上面调用的KMeans是一个类,sklearn中同样提供了函数形式的调用,其使用方法如下

from sklearn.cluster import k_means
cen, y, interia = k_means(X, 3)

其中,cen表示聚类后,每一类的质心;y为聚类后的标签;interia表示均方误差之和。

初值选取

KMeans最重要的概念是簇,也就是被分割后的数据种类;而每个簇都有一个非常重要的点,就是质心。在设定好簇的个数之后,也就相当于确定了质心的个数,而KMeans算法的基本流程是

  1. 选择k个点作为k个簇的初始质心
  2. 计算样本到这k个质心(簇)的距离,并将其划入距离最近的簇中
  3. 计算每个簇的均值,并使用该均值更新簇的质心

重复上述2-3的操作,直到质心区域稳定或者达到最大迭代次数。

从这个流程可以看出来,KMeans算法至少有两个细节需要考虑,一个是初始化方案,另一个则是质心更新的方案。

KMeans类或者k_means函数中,提供了两种初始化质心方案,通过参数init来控制

  • 'random':表示随机生成k个质心
  • 'k-means++':此为默认值,通过kMeans++方法来初始化质心。

kMeans++初始化质心的流程如下

  1. 随机选择1个点作为初始质心 x 0 x_0 x0
  2. 计算其他点到最近质心的距离
  3. 假定现有 n n n个质心了,那么选择距离当前质心较远的点作为下一个质心 x n x_n xn

重复步骤2和3,直到质心个数达到 k k k个。

若希望直接调用kMeans++函数,则可使用kmeans_plusplus

小批

sklearn提供了KMeans的一个变种MiniBatchKMeans,可在每次训练迭代中随机抽样,这种小批量的训练过程大大减少了运算时间。

当样本量非常巨大时,小批KMeans的优势是非常明显的

from sklearn.cluster import MiniBatchKMeans
import time

ys, xs = np.indices([4,4])*6
cens = list(zip(xs.reshape(-1), ys.reshape(-1)))
X, y = make_blobs(100000,centers=cens)

km = KMeans(16)
mbk = MiniBatchKMeans(16)
def test(func, value):
    t = time.time()
    func(value)
    print("耗时", time.time()-t)


test(km.fit_predict, X)
# 耗时 3.2028110027313232
test(mbk.fit_predict, X)
# 耗时 0.2590029239654541

可见效果非常明显,其中fit_predictpredict相似,但并没有返回值,km.fit_predict(X)运行之后,会更改km中的labels_属性,此即分类结果

fig = plt.figure()
ax = fig.add_subplot(1,2,1)
ax.scatter(X[:,0], X[:,1], c=km.labels_, 
    marker='.', alpha=0.5)
ax = fig.add_subplot(1,2,2)
ax.scatter(X[:,0], X[:,1], c=mbk.labels_, 
    marker='.', alpha=0.5)
plt.show()

效果如图所示,可见小批的KMeans算法和KMeans算法从结果上来看区别不大。

在这里插入图片描述

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

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

相关文章

Python基础语法之学习print()函数

在AI时代,编程已不是程序猿、攻城狮的专属属性,而是一个工具,或是一种技巧,本质上跟Word、PPT没啥区别。如果大家现在想掌握一门编程技能的话,那一定是 Python, 因为它既简洁高效,又能快速入门上手。本文将…

JavaWeb语法三:线程不安全问题的原因和解决方案

目录 1.线程的状态 2.线程不安全的原因 2.1:原子性 2.2: 可见性 2.3:有序性 3.解决线程不安全问题 3.1:synchronized 3.1.1:互斥 3.1.2:可重入 3.2:volatile关键字 3.3:w…

傻白入门芯片设计,盘点GPU业界的大佬(十五)

在PC个人电脑时代,英特尔(Inter)是无可争议的芯片巨头,凭借着X86架构在数据中心CPU中的压倒性地位,一度垄断全球90%的市场份额。然而在人工智能时代,以英伟达(NVIDIA)为首的GPU、AI芯…

大学生心里健康

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 网站前台:关于我们、联系信息文章信息、咨间师信息、服务信息、测试信息 管理员功能: 1、管理关…

[激光原理与应用-60]:激光器 - 光学 - 光的四大理论框架与其层次:几何光学、波动光学、电磁光学、电子光学

目录 第1章 光的四大理论框架与层次 第2章 光的四大理论各自的特点 2.1 几何光学(粒子性)》光学特征 2.2 波动光学(波动性) 2.3 电磁光学(电学性) 2.4 量子光学(能量) 第1章 光…

【信管4.2】定义范围与WBS

定义范围与WBS上次课程已经说过,今天的内容是非常重要的,可以说是整个范围管理的核心内容。因此,也请各位打醒十二分精神,一起来学习这两个非常重要的过程吧。定义范围定义范围, 是指定项目和产品详细描述的过程&#…

Canvas库 KonvaJS入门 2坐标体系总结

Canvas库 KonvaJS入门 2坐标体系总结一、 准备环境二、konvasJS坐标基本使用演示1. 按坐标放置控件2. 移动group3. 父元素 scale 变化4. 子元素scale变化5. 旋转一、 准备环境 KonvaJS的几个属性值与坐标都有关系,有时候不容易分清坐标如何计算,本文作个…

前端基础_传统Web页面

传统Web页面 传统Web页面就是打开浏览器,整个页面都会打开的应用。例如,笔者的个人网站http://siwei.me就是一个典型的“传统Web应用”,每次单击其中任意一个链接,都会引起页面的整个刷新 传统的页面每次打开,都要把…

π120E60 双通道数字隔离器 完美代替ISO7820FDW

π120E60 双通道数字隔离器 完美代替ISO7820FDW 。具有出色的性能特征和可靠性,整体性能优于光耦和基于其他原理的数字隔离器产品。产品传输通道间彼此独立,可实现多种传输方向的配置,可实现5.0kV rms 隔离耐压等级和 DC 到 200Mbps信号传输。…

Seata实现分布式事务控制

目录 1. 启动Seata 1.1 下载seata 1.2 修改配置文件及初始化 2. 使用Seata实现事务控制 2.1 初始化数据表 2.2 添加配置 1. 启动Seata 1.1 下载seata 下载地址:https://github.com/seata/seata/releases/v1.3.0/ 1.2 修改配置文件及初始化 将下载得到的…

安全智能分析 思路方案

数据共享 定义内涵 数据共享 是指在多个用户或多个程序之间遵循一定规则共同享用数据,并进行各种操作、运算和分析的一种技术。数据共享包括数据发布、接口、交换等内容。 技术背景 随着数字经济成为拉动全球经济增长的新引擎,大数据成为经济中重要的…

[附源码]Node.js计算机毕业设计个人资金账户管理Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

【OpenCV-Python】教程:6-3 Epipolar Geometry 对极几何

OpenCV Python Epipolar Geometry 对极几何 【目标】 学习多视图几何学习极点、对极线、对极约束等等; 【理论】 当我们使用针孔相机拍摄图像时,我们会丢失一个重要的信息,即图像的深度。或者图像中的每个点距离摄像机有多远,…

下一个AI舞台,名叫煤矿

如果大海给贝壳下的定义是珍珠,那么时间给煤的定义就是钻石。2020年初,我们曾经探访过山西一家大型矿山。矿山中的工程师对我们说,现在矿上特别需要新技术,需要数字化、智能化。但现在年轻人,尤其是懂AI、懂云计算的人…

Stm32旧版库函数16——stm32 超声波测距

/******************** (C) COPYRIGHT 2012 ELC ******************** * File Name : main.c * Author : ELCWHUT * Version : V1.0 * Date : 2012-12-05 * Description : 超声波测距的STM32代码,采用HC-HR04…

Git全栈体系(一)

第一章 Git 概述 Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subvers…

ArcGIS创建地理处理包!让你制作的工具自由分享

喜欢就关注我们吧! 0 前言 当用模型做好工具 分享到其他电脑 出现的模型不可用的情况 就如我们上期制作分享 的提取四至点的工具 有这个红叉的情况 因为他用到了子模型 所以发生路径不一致的情况 只要编辑配置就好了 那如何从根本上解决这个问题呢 答案是…

大数据Kudu(八):Kudu与Impala整合

文章目录 Kudu与Impala整合 一、​​​​​​​Kudu与Impala整合配置

乌班图(ubantu)部署.NET Core 6web项目(保姆教程)

1、新建文件夹,给读写权限 $ cd / #移动根目录(方便好找) 文件夹授权方式1:命令 $ sudo mkdir www #新建文件夹 $ cd /www $ sudo chmod 777 * -R #给读写权限 2、上传打包的项目文件,并解压 安装解压工具 $ sudo …

线性代数之N维向量

向量空间是线性代数的重要研究对象,具有广泛的应用。 1 n维向量运算 向量既有大小又有方向,如下表示: m*n个数aij(i1,2,...,m;j1,2,...,n)排成m行n列的矩形数表 若向量大小相当,方向相同则着两个向量相等 n个数a1,a2,...,an组成的…