机器学习算法——聚类算法

目录

  • 1. 概述
  • 2. K-MEANS算法
    • 2.1 工作流程
    • 2.2 代码实践

1. 概述

聚类算法是一种无监督学习方法,用于将数据集中的对象分组或聚集成具有相似特征的集合,该集合被称为簇(cluster)。聚类算法通过计算数据点之间的相似性或距离,将相似的数据点归为同一簇,使簇内差距最小化,簇间差距最大化,从而将数据集划分为多个互相区分的组。聚类算法的目标是在无标签的情况下,发现数据中的内在结构和模式。聚类算法可以发现数据中的隐藏模式、异常值或离群点,以及进行数据预处理和可视化。

2. K-MEANS算法

算法思想:以空间中的 K 个点为中心进行聚类,对最靠近他们的对象进行归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。

2.1 工作流程

  1. 先从没有标签的元素集合 A 中随机取 K 个元素,作为 K 个簇各自的质心。
  2. 分别计算剩下的元素到 K 个簇的质心的距离(可以使用欧氏距离),根据距离将这些元素划归到最近的簇。
  3. 根据聚类结果,重新计算质心(计算子集中所有元素各个维度的算数平均数)。
  4. 将集合 A 中所有元素按照新计算的质心重新进行聚类。
  5. 重复第3-4步,直到所有质心不再发生变化。

2.2 代码实践

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt

# 载入数据,以空格分隔数据
data = np.genfromtxt("kmeans.txt", delimiter=" ")
# 训练模型,设置4个聚类中心
model = KMeans(n_clusters=4)
model.fit(data)
# 聚类中心点坐标
centers = model.cluster_centers_
# 预测结果,也可以通过model.labels_查看模型中各样本点的类别
result = model.predict(data)
# 用不同颜色表示类别
mark = ['or', 'ob', 'og', 'oy']

# enumerate用于在迭代过程中同时获取元素的索引和值
for i,d in enumerate(data):
    plt.plot(d[0], d[1], mark[result[i]])

# 画出各个聚类的中心点
mark = ['*r', '*b', '*g', '*y']
for i,center in enumerate(centers):
    plt.plot(center[0], center[1], mark[i], markersize=20)

在这里插入图片描述

# 获取数据值所在的范围,这里的+1、-1是为了不让样本点出现在边框上
# 获取数据值所在的范围
x_min, x_max = data[:, 0].min() - 1, data[:, 0].max() + 1
y_min, y_max = data[:, 1].min() - 1, data[:, 1].max() + 1

# 生成网格矩阵元素
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))

#--------------------------------------------------------#
# 预测分类结果
# ravel():将多为数据展平为一维数据
# np.c_:按列连接两个数组,即拼接成点的坐标的形式
# contourf(xx, yy, z):创建填充等高线图,参数需为二维数组
#--------------------------------------------------------#
z = model.predict(np.c_[xx.ravel(), yy.ravel()])
z = z.reshape(xx.shape)
cs = plt.contourf(xx, yy, z)

# 绘制样本点
mark = ['or', 'ob', 'og', 'oy']
for i,d in enumerate(data):
    plt.plot(d[0], d[1], mark[result[i]])

# 绘制各个聚类的中心点
mark = ['*r', '*b', '*g', '*y']
for i,center in enumerate(centers):
    plt.plot(center[0],center[1], mark[i], markersize=20)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业建数仓的第一步是选择一个好用的ETL工具

当企业决定建立数据仓库(Data Warehouse),第一步就是选择一款优秀的ETL(Extract, Transform, Load)工具。数据仓库是企业数据管理的核心,它存储、整合并管理各种数据,为商业决策和数据分析提供支…

java中BigDecimal的介绍及使用(二)

系列文章目录 java中BigDecimal的介绍及使用,BigDecimal格式化,BigDecimal常见问题java中BigDecimal的介绍及使用(二) 文章目录 系列文章目录一、前言二、BigDecimal提供的方法2.1、stripTrailingZeros() 去除小数尾部所有的02.2、int signum()2.3、int…

python爬虫中 HTTP 到 HTTPS 的自动转换

前言 在当今互联网世界中,随着网络安全的重要性日益增加,越来越多的网站采用了 HTTPS 协议来保护用户数据的安全。然而,许多网站仍然支持 HTTP 协议,这就给我们的网络爬虫项目带来了一些挑战。为了应对这种情况,我们需…

vue3的单组件的编写(三)【响应式 API 之 toRef 与 toRefs】

响应式 API 之 toRef 与 toRefs 前面讲了 ref 和 reactive 这两种响应式API ,为了方便开发者使用,vue3 还出了两个用来 reactive 转换为 ref 的API,分别是 toRef 和 toRefs 。 🌈什么是toRef 与 toRefs 这两个API看拼写能猜到&…

(vue)前后端配合实现文件预览功能

(vue)前后端配合实现文件预览功能 1.页面&#xff1a; 2.后台返回数据&#xff1a; 3.预览效果&#xff1a; 4.代码&#xff1a; <el-descriptions-item><template slot"label">文件名称</template><el-button type"text" click"…

数字逻辑电路基础-时序逻辑电路之触发器

文章目录 一、D触发器二、verilog源码三、综合及仿真结果一、D触发器 本文介绍数字逻辑电路中常用的基础时序逻辑电路触发器。它有记忆和存储信息功能,触发器是边沿触发电路。 下图是触发器常用表示方式(时钟上升沿有效): 触发器由两个锁存器组成,前级是主锁存器,后级…

Python接口自动化测试 —— Selenium+pytest+数据驱动

主流自动化框架 selenium &#xff1a;web端自动化框架 &#xff0c;&#xff08;行业里面最核心的框架&#xff09; appium &#xff1a;手机app端框架 requests &#xff1a;接口测试 selenium 工具类封装 selenium提供了很多方法供我们去完成网页元素的操作&#xff0c; 在…

世微 多功能 LED降压型恒流芯片内置2.2A LED摩托车灯 全亮 半亮 爆闪 AP2403

产品描述 AP2403 是一款 PWM 工作模式,内置功率管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。输出功率可达 22W&#xff0c;电流 2.2A。AP2403 可实现三段功能切换&#xff0c;通过 MODE1/2/3 切换三种功能模式&#xff1a;全亮&#xff0c;半亮&#xff0…

ElementPlusError: [ElOnlyChild] no valid child node found

突然发现页面报了一堆黄色的错误提示 查了下原来是这里导致的&#xff0c;只需要把v-if 挪到popover那层即可 解决

sql调优

慢查询 SQL 治理方案 一、SQL 性能下降的原因 在对 SQL 进行分析之前&#xff0c;需要明确可能导致 SQL 执行性能下降的原因进行分析&#xff0c;执行性能下降可以体现在很多方面&#xff1a; 查询语句写的烂索引没加好表数据过大数据库连接数不够查询的数据量过大被其他慢s…

TikTok美区本土店铺如何做好IP隔离?

为什么要进行IP隔离呢&#xff1f;因为我们无法在国内直接运营Shopee、TikTok、Lazada等平台的本土店&#xff0c;平台识别出店铺登录IP非本土IP&#xff0c;则容易导致店铺风控、被标记为伪本土店&#xff0c;影响店铺经营。 TikTok美区店铺的IP隔离方法和Shopee本土店一致&a…

羊大师详解羊奶如何帮助控制血压

羊大师详解羊奶如何帮助控制血压 羊奶是一种珍贵的天然饮品&#xff0c;不仅具有丰富的营养成分&#xff0c;还被证实对血压具有调控作用。很多人在了解到羊奶的功效后&#xff0c;都对其与血压之间的关系产生了浓厚的兴趣。接下来&#xff0c;小编羊大师将为大家详细介绍羊奶…

UEC++ day8

伤害系统 给敌人创建血条 首先添加一个UI界面用来显示敌人血条设置背景图像为黑色半透明 填充颜色 给敌人类添加两种状态表示血量与最大血量&#xff0c;添加一个UWidegtComponet组件与UProgressBar组件 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "Enemy …

短视频变表情包gif怎么做?这一招最好用

Gif动态表情包是一种有效的表达感情的方式。可以通过添加图像、文字等更加直观的传递情感和信息。在各种聊天软件中gif动态表情包也是非常收欢迎的。当我们看到一段视频想要将其制作成gif动态表情包的时候要怎么操作呢&#xff1f;教大家使用在线制作gif&#xff08;https://ww…

低代码开发:云表颠覆传统,轻松破解应用开发周期长之困局

在传统的应用开发模式下&#xff0c;应用开发周期长一直是IT部门和业务部门头疼的问题。面对业务部门提出的一个又一个新的应用需求&#xff0c;IT部门往往应接不暇&#xff0c;难以一一满足。这种困境不仅使IT部门负担沉重&#xff0c;更导致业务部门因长时间的等待而心生不满…

SVD 最小二乘法解 亲测ok!

线性最小二乘问题 m个方程求解n个未知数&#xff0c;有三种情况&#xff1a; mn且A为非奇异&#xff0c;则有唯一解&#xff0c;xA.inverse()*bm>n&#xff0c;约束的个数大于未知数的个数&#xff0c;称为超定问题&#xff08;overdetermined&#xff09;m<n&#xff0…

多个视频怎么生成一个二维码?二维码看视频的制作方法

二维码能放入多个视频吗&#xff1f;现在用二维码看视频是很流行的一种方式&#xff0c;不仅符合现在人的行为习惯&#xff0c;而且还不需要占用自身的容量空间&#xff0c;能够即时的获取视频内容。那么当有多个视频需要展示&#xff0c;但是想要放到一个二维码中&#xff0c;…

推荐一款png图片打包plist工具pngPackerGUI_V2.0

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.…

Claude 发布2.1 版本,重大升级更新来看看有什么新功能?

11 月 23 日消息&#xff0c;OpenAI 竞争对手 Anthropic 日前推出了 Claude 2.1 聊天机器人及对应同名 AI 模型Claude 2.1&#xff0c;本文将总结Claude 2.1的主要功能。 增强的处理能力 上下文处理量大幅提升&#xff1a;Claude 2.1 现在能处理高达 200K上下文标记&#xff…