机器学习聚类算法

聚类算法是一种无监督学习方法,用于将数据集中的样本划分为多个簇,使得同一簇内的样本相似度较高,而不同簇之间的样本相似度较低。在数据分析中,聚类算法可以帮助我们发现数据的内在结构和规律,从而为进一步的数据分析和挖掘提供有价值的信息。

聚类算法在现实中的应用:用户画像,广告推荐,搜索引擎的流量推荐,恶意流量识别,新闻聚类,筛选排序;图像分割,降维,识别;离群点检测;

在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果。


K-Means算法

K-means是一种基于划分的聚类算法,其基本原理是通过迭代计算,将数据集划分为K个簇,使得每个簇内的数据点到该簇中心的距离之和最小。

K-means算法的主要步骤:

  • 初始化:选择K个初始质心;
  • 分配:将每个数据点分配到距离最近的质心所在的簇;
  • 更新:重新计算每个簇的质心;
  • 迭代:重复分配和更新步骤,直到质心不再发生变化或达到最大迭代次数。

 K-means算法适用于球形簇分布的数据,对噪声和异常值较为敏感,需要预先指定簇的数量K。

层次聚类算法 

层次聚类是一种基于树形结构的聚类方法,通过计算数据点之间的距离,逐步将数据点合并为更大的簇。层次聚类可以分为凝聚型(自下而上)和分裂型(自上而下)两种方法。

  • 初始化:将每个数据点视为一个簇;
  • 合并:计算簇之间的距离,将距离最近的两个簇合并为一个新的簇;
  • 迭代:重复合并步骤,直到所有数据点合并为一个簇或达到预设的簇数量。

层次聚类不需要预先指定簇的数量,可以发现任意形状的簇,但计算复杂度较高,不适合处理大规模数据集。

DBSCAN算法 

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,其基本原理是通过定义数据点的邻域半径和邻域密度阈值,将相互靠近且密度相近的数据点划分为一个簇。

  • 初始化:选择一个尚未访问的数据点;
  • 扩展:如果该数据点的邻域内有足够多的数据点,则将其纳入当前簇,并继续扩展邻域;
  • 迭代:重复扩展步骤,直到所有数据点被访问。

DBSCAN算法可以发现任意形状的簇,对噪声和异常值具有较好的鲁棒性,需要预先设定邻域半径和密度阈值。


KMeans Api 

sklearn.cluster.KMeans(n_clusters=8)

  • 参数:n_clusters:开始的聚类中心数量

estimator.fit(x)
estimator.predict(x)
estimator.fit_predict(x)

 案例

随机创建不同二维数据集作为训练集,并结合k-means算法将其聚类 。

聚类参数n_cluster传值不同,得到的聚类结果不同。

make_blobs函数是用于生成模拟数据的函数,它返回一个包含样本数据和对应标签的元组

  • n_samples:表示要生成的样本数量,默认为100。
  • n_features:表示每个样本的特征数量,默认为2。
  • centers:表示类别的中心点坐标,可以是一个列表或数组,其中每个元素代表一个类别的中心点坐标。在给定的示例中,有4个类别,分别位于(-1, -1)、(0, 0)、(1, 1)和(2, 2)。
  • cluster_std:表示每个类别的标准差,可以是一个列表或数组,其中每个元素代表一个类别的标准差。在给定的示例中,有4个类别,它们的标准差分别为0.4、0.2、0.2和0.2。
  • random_state:表示随机数生成器的种子,用于控制随机性。在给定的示例中,随机数生成器的种子设置为9。
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# 簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
                  cluster_std=[0.4, 0.2, 0.2, 0.2],
                  random_state=9)

# 数据集可视化
plt.scatter(X[:, 0], X[:, 1]')
plt.show()

 

 使用k-means进行聚类,并使用silhouette_score评估

y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)

plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

print(silhouette_score(X, y_pred))

# 0.6634549555891298

 

 K-Means聚类步骤

  • K表示初始中心点个数(计划聚类数)
  • means求中心点到其他数据点距离的平均值

  1. 随机设置K个特征空间内的点作为初始的聚类中心

  2. 对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别

  3. 接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点。

  4. 如果计算得出的新中心点与原中心点一样那么结束,否则重新进行第二步过程。

模型评估 

聚类算法模型评估通常涉及多种指标,这些指标可以帮助我们了解聚类的效果和质量。

  1. SSE(Sum of Squared Errors):SSE计算的是聚类中心与各个样本点之间误差的平方和。它衡量的是簇内紧密程度,即簇内样本与聚类中心的相似度。SSE越小,表示簇内样本越紧密,聚类效果越好。
  2. 轮廓系数(Silhouette Coefficient):轮廓系数结合了簇内的凝聚力和簇间的分离力,是一种基于样本之间距离的评估指标。它的值域在-1到1之间,值越大表示聚类效果越好。
  3. Calinski-Harabaz指数(CH指数):CH指数基于簇内和簇间的协方差计算,值越大表示聚类效果越好。它适用于簇大小差不多的情况。
  4. Davies-Bouldin指数(DB指数):DB指数是基于样本之间距离的评估指标,它评估的是簇之间的分离度。DB指数越小,表示簇之间的分离度越好,聚类效果越佳。

Elbow method — K值确定 

方法的基本思想是:

  1. 对于不同的K值,计算每个K值对应的总内平方和(Within-Cluster-Sum of Squared Errors),即每个样本点到其所属簇质心的距离的平方和。
  2. 随着K值的增加,WCSS会逐渐减小,因为更多的簇意味着样本点与其质心的平均距离更小。
  3. 绘制WCSS随K值变化的折线图,通常会出现一个“肘点”(elbow point),即WCSS下降速度明显变慢的地方。
  4. “肘点”对应的K值被认为是较优的簇数量,因为它在减少误差的同时,并没有大幅增加簇的数量。

 

下降率突然变缓时即认为是最佳的k值。 

轮廓系数法

结合聚类的凝聚度和分离度,用于评估聚类的效果,使其内部距离最小化,外部距离最大化

计算样本到同簇其他样本的平均距离 ,距离越小样本的簇内不相似度越小,说明样本越应该被聚类到该簇。

求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],系数越大,聚类效果越好。

每次聚类后,每个样本都会得到一个轮廓系数,为1时,说明这个点与周围簇距离较远,结果非常好,为0,说明这个点可能处在两个簇的边界上,当值为负时,该点可能被误分了。

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

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

相关文章

Centos 内存和硬盘占用情况以及top作用

目录 只查看内存使用情况: 内存使用排序取前5个: 硬盘占用情况 定位占用空间最大目录 top查看cpu及内存使用信息 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

Python 潮流周刊#38:Django + Next.js 构建全栈项目

△△请给“Python猫”加星标 ,以免错过文章推送 你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。本周刊开源,欢迎投稿[1]。另有电报频道[2]作为副刊,补充发布更加丰富的资讯,…

protoc结合go完成protocol buffers协议的序列化与反序列化

下载protoc编译器 下载 https://github.com/protocolbuffers/protobuf/releases ps: 根据平台选择需要的编译器,这里选择windows 解压 加入环境变量 安装go专用protoc生成器 https://blog.csdn.net/qq_36940806/article/details/135017748?spm1001.2014.3001.…

canvas图片上设置镂空文字效果

查看专栏目录 canvas实例应用100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…

VR全景技术可以应用在哪些行业,VR全景技术有哪些优势

引言: VR全景技术(Virtual Reality Panorama Technology)是一种以虚拟现实技术为基础,通过360度全景影像、立体声音、交互元素等手段,创造出沉浸式的虚拟现实环境。该技术不仅在娱乐领域有着广泛应用,还可…

方案分享:F5怎么样应对混合云网络安全?

伴随着云计算走入落地阶段,企业的云上业务规模增长迅猛。具有部署灵活、成本低、最大化整合现有资产、促进业务创新等优点的混合云逐渐成为企业选择的部署方式。与此同时,安全运营的复杂度进一步提高。比如安全堆栈越来越复杂、多云基础设施和应用添加网…

小白Linux学习笔记-Linux开机启动流程

Linux 开机启动流程 文章目录 Linux 开机启动流程启动流程概览详细讲解开机软件 —— BIOS、Grub名词解释流程解释BIOS 开机文档 —— menu.lst、grub.confGrub 配置文档流程解释 init 程序流程解释init 执行的相关文件 run-level(启动等级) 相关的命令实验rhel6 单用户模式修改…

机器学习数据预处理方法(数据重编码)

文章目录 [TOC]基于Kaggle电信用户流失案例数据(可在官网进行下载)一、离散字段的数据重编码1.OrdinalEncoder自然数排序2.OneHotEncoder独热编码3.ColumnTransformer转化流水线 二、连续字段的特征变换1.标准化(Standardization)…

数字人客服技术预研

技术洞察 引言 在当今数字化时代,不断进步和创新的人工智能(AI)技术已经渗透到各行各业中。随着AI技术、大模型技术逐步发展,使得数字人的广泛应用成为可能,本文将跟大家一起探讨AI数字人客服的概念、优势、应用场景…

苹果电脑录制视频在哪里?教你快速找到它!

录制电脑屏幕已成为了许多用户日常所需的操作,无论是录制在线课程、游戏过程,还是网络会议,一款好的录屏软件能帮助用户高效、便捷地完成任务。苹果电脑是当今主流的计算机设备之一,可是很多用户不知道苹果电脑录制视频在哪里。在…

麒麟信安登录央视, 深度展现为中国信息安全铸“魂”之路

近日,麒麟信安登录央视频道,《麒麟信安——为中国信息安全铸“魂”》在CCTV-4中文国际频道、CCTV-7国防军事频道、CCTV-10 科教频道、CCTV-12社会与法频道、CCTV-17农业农村频道,向亿万观众深度展现麒麟信安为中国信息安全铸“魂”之路。 麒…

Kafka相关内容复习

为什么要用消息队列 解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 可恢复性 系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队…

XML:可扩展标记语言

XML:可扩展标记语言 主要内容 XML介绍DTDXSDDOM解析SAX解析 学习目标 知识点要求XML介绍掌握DTD掌握XSD掌握DOM解析掌握SAX解析掌握 一、XML介绍 1. 简介 XML(Extensible Markup Language)可扩展标记语言。严格区分大小写。 2. XML和…

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案 大家好 我是寸铁👊 总结了一篇Error: only one service expected goctl一键转换生成rpc服务错误解决方案的文章✨ 喜欢的小伙伴可以点点关注 💝 问题背景 今天寸铁在…

云上未来:探索云计算的技术变革与应用趋势

一、云计算的起源和演进 1.1 早期计算模型 在探讨云计算的起源和演进之前,理解早期的计算模型对于构建全面的视角至关重要。早期计算模型的发展奠定了云计算的基础,为其演进提供了技术和理念的支撑。 1.1.1 集中式计算模型 在计算技术的早期阶段&…

苹果 Vision Pro 产地首次公布:原汁原味的中国制造丨 RTE 开发者日报 Vol.143

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

Day4.

单链表 #include <head.h>typedef struct List{int value;struct List *pointe; }*list; list create_space() {list s(struct List *)malloc(sizeof(struct List)); //向堆区申请空间s->pointe NULL;//初始化s->value 0;return s; } list inserhead_list(lis…

揭秘程序员之夜:为何他们与电脑不分昼夜?

在这个数字化飞速发展的时代&#xff0c;程序员已经成为这座高科技城堡中的守夜人。他们的电脑似乎从未进入“睡眠”状态&#xff0c;长明的屏幕背后隐藏着怎样的奥秘&#xff1f;今天&#xff0c;让我们一起探索程序员们坚守岗位的真实理由。 有一种“派对”一直在程序员的电脑…

14.scala隐式转换

目录 概述实践代码执行结果 结束 概述 隐式转换&#xff1a;偷偷的(隐式)对现有功能进行增强(转换) 实践 代码 package com.fun.scalaimport java.io.File import scala.io.Sourceobject ImplicitApp {def main(args: Array[String]): Unit {// implicit 2 to 等价 &…

2.5作业

通过消息队列实现进程之间通信 send #include <myhead.h> struct msgbuf {long int mtype; char mtext[1024]; }; //定义一个消息大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long int) int main(int argc, const char *argv[]) {//1、创建key值以便创建消息队…