【Python/Pytorch 】-- K-means聚类算法

在这里插入图片描述
文章目录

文章目录

  • 00 写在前面
  • 01 基于Python版本的K-means代码
  • 02 X-means方法
  • 03 最小二乘法简单理解
  • 04 贝叶斯信息准则

00 写在前面

时间演变聚类算法:将时间演变聚类算法用在去噪上,基本思想是,具有相似信号演化的体素具有相似的模型参数值,并且由机器学习决定的集群数量远远小于体素的数量。因此,对一个聚类进行平均可以大大提高聚类级逆解的信噪比,这可以用作体素级优化的鲁棒初始猜测。

在该演变算法的基础上,总结了K-means算法、X-means算法、最小二乘法、贝叶斯信息准则

01 基于Python版本的K-means代码

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

# 生成具有三个簇的示例数据
n_samples = 300
n_features = 2
centers = 3
cluster_std = 1.0

x, y = make_blobs(n_samples=n_samples, n_features=n_features, centers=centers, cluster_std=cluster_std, random_state=42)

# 设置K值(簇的数量)
k = 3

# 初始化KMeans算法
kmeans = KMeans(n_clusters=k, random_state=42)

# 进行聚类
kmeans.fit(X)

# 获取聚类结果
labels = kmeans.labels_
centroids = kmeans.cluster_centers_

# 绘制聚类结果
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', marker='o', edgecolor='k', s=50)
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x', s=200, linewidths=3, zorder=10)
plt.title('K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.grid(True)
plt.show()

在这里插入图片描述

02 X-means方法

传统的K-means聚类算法需要预先确定聚类的数量K。在这里,使用了一种称为X-means的方法,该方法能够自动选择K。X-means方法通过两个步骤反复迭代来选择合适的聚类数量K。

  • 步骤1:
  • 首先执行传统的K-means聚类,给定一个初始的聚类数量。
  • 计算贝叶斯信息准则(BIC),BIC是聚类对数似然和对K的惩罚项的和。
  • 随着K的增加,拟合的优度(对数似然)增加,但过拟合的可能性也增加。惩罚项用来减少这种可能性。
  • 步骤2:
  • 每个聚类的质心(质心)被替换为两个子质心,并在该聚类内使用这些子质心作为初始猜测进行局部K-means(K = 2)。
  • 计算该聚类的BIC:如果BIC较大,则进行替换,否则保留“父”质心。
  • 重复步骤1和步骤2,直到整体BIC不再增加或 K达到预先设定的最大值为止。
  • 在这项研究中,初始聚类数为1,最大聚类数为50。

03 最小二乘法简单理解

最小二乘法(Least Squares Method, LSM)是统计学和数据分析中常用的一种方法,用于拟合数据模型。它的本质是一个优化过程,因为它通过最小化目标函数来找到模型参数的最优解。

(1)最小二乘法的基本思想
假设我们有一组观测数据点(x1, y1),(x2, y2),…,(xn, yn),我们希望找到一个函数 f(x)来拟合这些数据点。最简单的情况是线性拟合,即找到一个直线模型 y=ax+b,使得该直线尽可能靠近所有观测数据点。

最小二乘法的目标是最小化以下目标函数(误差的平方和):
S ( a , b ) = ∑ i = 1 n ( y i − ( a x i + b ) ) 2 S(a,b) = {\textstyle \sum_{i=1}^{n}} (y_{i}-(ax_{i}+b) )^{2} S(a,b)=i=1n(yi(axi+b))2
其中,yi是观测值,axi+b是预测值。

(2)最小二乘法的优化过程

  • 步骤1:
    定义目标函数:目标函数S(a,b) 表示预测值与观测值之间的误差的平方和。
  • 步骤2:
    求导数:为了找到使目标函数最小的参数 a 和b,我们对 S(a, b) 分别对a 和 b 求偏导数,并将其设为零,得到一组方程:
    ∂ S ∂ a = − 2 ∑ i = 1 n x i ( y i − a x i − b ) = 0 \frac{\partial S}{\partial a} = -2 {\textstyle \sum_{i=1}^{n}} x_{i}(y_{i}-ax_{i}-b)=0 aS=2i=1nxi(yiaxib)=0
    ∂ S ∂ b = − 2 ∑ i = 1 n ( y i − a x i − b ) = 0 \frac{\partial S}{\partial b} = -2 {\textstyle \sum_{i=1}^{n}} (y_{i}-ax_{i}-b)=0 bS=2i=1n(yiaxib)=0
  • 步骤3:
    解方程:通过求解上述方程组,可以得到最优参数 a 和 b 的值。具体求解过程可以得到如下结果:
    a = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 a = \frac{n {\textstyle \sum_{i=1}^{n}}x_{i}y_{i}-\sum_{i=1}^{n}x_{i}\sum_{i=1}^{n}y_{i} }{n {\textstyle \sum_{i=1}^{n}}x_{i}^{2}-({\textstyle \sum_{i=1}^{n}}x_{i})^{2} } a=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nxii=1nyi
    b = ∑ i = 1 n y i − a ∑ i = 1 n x i n b = \frac{{\textstyle \sum_{i=1}^{n}}y_{i}-a\sum_{i=1}^{n}x_{i}}{n} b=ni=1nyiai=1nxi
  • 步骤4:
    优化的本质:最小二乘法的过程实际上是通过优化方法来最小化目标函数。优化在这里的意思是找到使目标函数达到最小值的参数组合。在最小二乘法中,这个目标函数是误差的平方和,优化过程就是通过求解导数来找到误差平方和的最小值。

04 贝叶斯信息准则

贝叶斯信息准则(Bayesian Information Criterion, BIC)是一种统计量,用于模型选择,特别是在评估模型复杂性和拟合优度之间的平衡时使用。
BIC 的计算公式如下:
B I C = − 2 l n ( L ) + k l n ( n ) BIC=-2ln(L) +kln(n) BIC=2ln(L)+kln(n)

其中:

  • ln(L)是模型的对数似然(log-likelihood)。对数似然度量了模型对数据的拟合优度。对数似然值越大,说明模型越能解释数据。
  • k是模型的参数数量。在聚类模型中,参数数量通常包括聚类数K和每个聚类的参数(如均值和方差)。k越大,模型越复杂。
  • n是样本数量。样本数量是指数据中的观测值个数。
  • BIC 的公式中,-2ln(L)代表了模型的拟合优度,值越小,拟合越好。kln(n)是对模型复杂性的惩罚项,随着参数数量 k 和样本数量n的增加,惩罚项也增加。这个项用来防止过拟合。BIC 的值越小,模型越好。因此,在选择模型时,希望找到使 BIC 最小的模型。

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

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

相关文章

连续9年618全渠道第一,入选最受用户关注TOP10,德施曼做对了什么?

近日,智能锁赛道领军品牌德施曼闯入大消费赛道,与宝洁、美的等品牌一起入选今年京东618最受用户关注TOP10品牌。 2024年的618大促已正式落下帷幕,大品牌纷纷交出了这场“年中大考”的答卷;其中高端智能锁领军品牌德施曼也交出了一…

一个故事,告诉你为什么要做目标管理

在一个小镇上,镇上的领导找到一群建筑工人,要求他们建造一堵墙,以保护镇上的居民免受外界侵扰。 然而,领导只是简单地描述了墙的作用和位置,却没有给出具体的尺寸和高度要求。工人们认为这是一个简单而直接的任务&am…

MQTTX 1.10.0 发布:CLI高级文件管理与配置

MQTTX 1.10.0 版本现已发布! 在本次更新中,CLI 版本在文件管理和配置功能方面进行了显著增强。主要更新包括:支持从文件中读取和写入消息、高级配置选项、文本输出模式、以及改进的日志记录。此外,桌面版本现在支持数据库重建&am…

情感搞笑聊天记录视频:AI自动化生成技术,操作简单,教程+软件

在数字化时代,内容创作已成为吸引观众、传递信息的重要手段。随着人工智能技术的飞速发展,AI自动生成视频为创作者提供了新的工具和可能性。本文将介绍如何利用AI技术,通过情感搞笑聊天记录视频,在视频号上实现内容的自动化生成&a…

windows系统上nginx搭建文件共享

1、下载windows版nginx 下载地址 2、配置nginx 编辑nginx.conf配置文件 在http模块下添加这个参数 underscores_in_headers on;#修改location内容,共享哪个文件夹,就写哪个文件夹,最后一定要跟上/,否则无法访问 location / {…

艺术签名生成工具哪个好?5个工具定制个性化签名

在追求个性化的现代社会,艺术签名已经成为一种时尚和趋势,越来越多的人开始关注和尝试学习如何设计自己的艺术签名。 这不仅是一种表达自我的方式,也是一种展现个性和独特性的方式。今天让我们一起探索5款艺术签名在线生成工具,让…

【Python系列】FastAPI 中的路径参数和非路径参数解析问题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

边缘计算是什么?天拓四方

边缘计算,作为一种分布式计算模型,正在逐步改变我们对数据处理和计算的传统认知。其核心思想是将数据处理和计算资源放置在接近数据产生源头的边缘设备、传感器或用户设备上,从而提供更快速、实时的计算和数据分析能力。在当前的数字化时代&a…

vue3-openlayers 轨迹回放(历史轨迹)(ol-animation-path实现)

本篇介绍一下使用vue3-openlayers轨迹回放(历史轨迹)(ol-animation-path实现) 1 需求 轨迹回放(历史轨迹)实时轨迹 2 分析 轨迹回放(历史轨迹),一般是一次性拿到所有…

AI交互及爬虫【数据分析】

各位大佬好 ,这里是阿川的博客,祝您变得更强 个人主页:在线OJ的阿川 大佬的支持和鼓励,将是我成长路上最大的动力 阿川水平有限,如有错误,欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

axios全局封装AbortController取消重复请求

为什么? 问题:为什么axios要配置AbortController?防抖节流不行吗? 分析: 防抖节流本质上是用延时器来操作请求的。防抖是判断延时器是否存在,如果存在,清除延时器,重新开启一个延…

地信大四,实习重要吗?怎么找实习岗位?

“地信怎么找实习啊?” “实习三个月以上?暑假只有两个月啊” “什么岗位实习比较有用?” “助理类岗位是做什么?” …… 同学们好啊,不知不觉24年已经是过完一小半了,24届毕业的同学们也差不多就要迎来…

ES内存溢出报错问题解决方案

博主有话说&#xff1a;该博文根据实际案例编写&#xff0c;在编写过程中将敏感信息进行替换&#xff0c;可能存在矛盾的地方&#xff0c;望见谅 1 错误详情 [typecircuit_breaking_exception, reason[parent] Data too large, data for [<http_request>] would be [1256…

Qt项目天气预报(5) - 根据JSON刷新天气信息+城市匹配

刷新当天天气 我们使用如下api接入&#xff0c;当然需要自己去 易客云天气API免费天气API接口|天气预报接口|全球天气API接口|气象预警|空气质量 (tianqiapi.com)注册后生成自己的对应id才可以使用 //专业天气v61 http://v1.yiketianqi.com/api?unescape1&versionv61&…

力扣爆刷第153天之TOP100五连刷26-30(接雨水、环形链表、最长上升子序列)

力扣爆刷第153天之TOP100五连刷26-30&#xff08;接雨水、环形链表、最长上升子序列&#xff09; 文章目录 力扣爆刷第153天之TOP100五连刷26-30&#xff08;接雨水、环形链表、最长上升子序列&#xff09;一、300. 最长递增子序列二、415. 字符串相加三、143. 重排链表四、42.…

docker技术的说明

根据学习网站整理&#xff1a;Docker 10分钟快速入门_哔哩哔哩_bilibili 小白也能看懂的容器科普说明_哔哩哔哩_bilibili 1.虚拟机&#xff0c;需要模拟硬件系统、运行整个操作系统&#xff0c;但体积臃肿&#xff0c;内存占用较高&#xff0c;程序的性能也会受到影响。 2.…

哪里找好用的商城系统源码?

很多企业在挑选商城系统时&#xff0c;由于不懂源码&#xff0c;很难选择到高质量源码的商城系统&#xff0c;那么哪里找好用的商城系统源码?如何选择?接下来就跟着启山智软小编一起来看看吧&#xff0c;以下为选择源码时的四看&#xff1a; 1.一看源码公司行业动态 可以查…

git上传本地项目及更新项目

1、注册GitHub账号和下载git 2、在GitHub上新建一个仓库&#xff0c;点击号——>New repository&#xff0c;给仓库起一个名字&#xff0c;点击Create repository 3、进入要上传的项目中&#xff0c;右键点击git back here&#xff0c;命令行输入git init初始化&#xff0c…

13个行业数据分析指标体系如何建设100问

提供针对13个行业的数据分析指标体系的全面指南&#xff0c;涵盖各行业的关键指标和分析维度&#xff0c;帮助读者深入了解和构建有效的指标体系。以下是文章的主要内容&#xff1a; 电商行业数据指标体系&#xff1a;包括客户价值、商品、网站流量、整体运营、市场营销活动、市…

什么是响应式编程

我们知道&#xff0c;当系统面对大流量、高并发的访问请求时&#xff0c;就可能会出现一系列性能问题&#xff0c;导致服务丧失了即时的响应性。如何时刻确保系统具有应对请求压力的能力&#xff0c;是架构设计的核心问题之一。 经典的服务隔离、限流、降级以及熔断等机制能够在…