当前位置: 首页 > article >正文

机器学习:聚类算法及实战案例

本文目录:

  • 一、聚类算法介绍
  • 二、分类
    • (一)根据聚类颗粒度分类
    • (二)根据实现方法分类
  • 三、聚类流程
  • 四、K值的确定—肘部法
    • (一)SSE-误差平方和
    • (二)肘部法确定 K 值
  • 五、代码重点
    • (一)SC 系数(评估聚类效果)
    • (二)CH 系数(评估聚类效果)
    • (三)基础代码
      • 1.创建数据集
      • 2.使用k-means进行聚类,并使用CH方法评估
      • 3.聚类评估的综合使用
  • 六、实战案例
    • (一)案例介绍
    • (二)代码实现

一、聚类算法介绍

一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。

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

聚类算法常用于用户画像,广告推荐,Data Segmentation,搜索引擎的流量推荐,恶意流量识别等方面。
在这里插入图片描述

二、分类

(一)根据聚类颗粒度分类

在这里插入图片描述
分为细聚类(上图1)、粗聚类(上图2)。

(二)根据实现方法分类

在这里插入图片描述

三、聚类流程

**1、**随机设置K个特征空间内的点作为初始的聚类中心(质心);

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

**3、**接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值);

**4、**如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程。

四、K值的确定—肘部法

(一)SSE-误差平方和

在这里插入图片描述

  1. K 表示聚类中心的个数

  2. Ci 表示簇

  3. p 表示样本

  4. mi 表示簇的质心

(二)肘部法确定 K 值

  1. 对于n个点的数据集,迭代计算 k from 1 to n,每次聚类完成后计算 SSE

  2. SSE 是会逐渐变小的,因为每个点都是它所在的簇中心本身。

  3. SSE 变化过程中会出现一个拐点,下降率突然变缓时即认为是最佳 n_clusters(k) 值。

  4. 在决定什么时候停止训练时,肘形判据同样有效,数据通常有更多的噪音,在增加分类无法带来更多回报时,我们停止增加类别。

在里插入图片描述
上述图片,最佳k值为3左右。

五、代码重点

(一)SC 系数(评估聚类效果)

在这里插入图片描述

  1. 计算每一个样本 i 到同簇内其他样本的平均距离 ai,该值越小,说明簇内的相似程度越大;
  2. 计算每一个样本 i 到最近簇 j 内的所有样本的平均距离 bij,该值越大,说明该样本越不属于其他簇 j;
  3. 计算所有样本的平均轮廓系数;
  4. 轮廓系数的范围为:[-1, 1],值越大聚类效果越好。

(二)CH 系数(评估聚类效果)

在这里插入图片描述
SSW 的含义:

  1. Cpi 表示质心
  2. xi 表示某个样本
  3. SSW 值是计算每个样本点到质心的距离,并累加起来
  4. SSW 表示表示簇内的内聚程度,越小越好
  5. m 表示样本数量
  6. k 表示质心个数

SSB 的含义:

  1. Cj 表示质心,X 表示质心与质心之间的中心点,nj 表示样本的个数
  2. SSB 表示簇与簇之间的分离度,SSB 越大越好

(三)基础代码

1.创建数据集

import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabaz_score# 创建数据集
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,
# 簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2, 0.2]
#make_blobs 用于生成多类别的聚类数据集,通过指定总样本数(n_samples)、中心点(centers)、标准差(cluster_std)等等参数,创建具有明确分组结构的样本。
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],  #n_feature: 每个样本的特征数(2代表二维数据)random_state=9)# 数据集可视化
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

2.使用k-means进行聚类,并使用CH方法评估

y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)
# 分别尝试n_cluses=2\3\4,然后查看聚类效果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()# 用Calinski-Harabasz Index评估的聚类分数
print(calinski_harabasz_score(X, y_pred))

3.聚类评估的综合使用

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
from sklearn.metrics import calinski_harabasz_scoreif __name__ == '__main__':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.figure(figsize=(18, 8), dpi=80)plt.scatter(x[:, 0], x[:, 1], c=y)plt.show()estimator = KMeans(n_clusters=4, random_state=0)estimator.fit(x)y_pred = estimator.predict(x)# 1. 计算 SSE 值print('SSE:', estimator.inertia_)# 2. 计算 SC 系数print('SC:', silhouette_score(x, y_pred))# 3. 计算 CH 系数print('CH:', calinski_harabasz_score(x, y_pred))

六、实战案例

(一)案例介绍

已知:客户性别、年龄、年收入、消费指数

需求:对客户进行分析,找到业务突破口,寻找黄金客户
在这里插入图片描述
数据集共有 4 个特征, 200 行。

(二)代码实现

# -*- coding: utf-8 -*-
"""
任务需求:对客户数据,根据收入和消费指数进行聚类
实现步骤:1.加载数据并提取进行聚类的特征数据2.寻找最佳K个聚类中心3.聚类4.聚类结果展示
"""
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score# 1.加载数据并提取进行聚类的特征数据
customers_data = pd.read_csv('data/customers.csv')
print(customers_data.info())
# 没有缺失值,取Annual Income (k$)以及Spending Score (1-100)这两个特征进行聚类
x = customers_data.iloc[:, 3:]def find_best_k():# 2.寻找最佳K个聚类中心--->肘部法则# 通过肘部法则,最佳的K值是5sse_list = []sc_list = []for i in range(2, 11):k_means = KMeans(n_clusters=i)k_means.fit(x)# 统计SSEsse_list.append(k_means.inertia_)# 统计SC轮廓系数labels = k_means.predict(x)sc_score = silhouette_score(x, labels)sc_list.append(sc_score)fig = plt.figure(figsize=(20, 10))# 绘制SSE折线图ax1 = fig.add_subplot(121)ax1.plot(range(2, 11), sse_list, 'or-')ax1.set_ylabel = 'SSE'ax1.set_xlabel = 'K'ax1.grid()# 绘制SC轮廓系数折线图ax2 = fig.add_subplot(122)ax2.plot(range(2, 11), sc_list, 'or-')ax2.set_ylabel = 'SC'ax2.set_xlabel = 'K'ax2.grid()plt.show()def show_result():# 3.聚类k_means = KMeans(n_clusters=5)y_labels = k_means.fit_predict(x)# 4.聚类结果展示# 绘制第1类数据点,使用红色标记,标签为'Standard'plt.scatter(x.values[y_labels == 0, 0], x.values[y_labels == 0, 1], s=100, c='red', label='Standard')# 绘制第2类数据点,使用蓝色标记,标签为'Traditional'plt.scatter(x.values[y_labels == 1, 0], x.values[y_labels == 1, 1], s=100, c='blue', label='Traditional')# 绘制第3类数据点,使用绿色标记,标签为'Normal'plt.scatter(x.values[y_labels == 2, 0], x.values[y_labels == 2, 1], s=100, c='green', label='Normal')# 绘制第4类数据点,使用青色标记,标签为'Youth'plt.scatter(x.values[y_labels == 3, 0], x.values[y_labels == 3, 1], s=100, c='cyan', label='Youth')# 绘制第5类数据点,使用洋红标记,标签为'TA'plt.scatter(x.values[y_labels == 4, 0], x.values[y_labels == 4, 1], s=100, c='magenta', label='TA')# 绘制聚类中心点,使用黑色标记,标签为'Centroids'plt.scatter(k_means.cluster_centers_[:, 0], k_means.cluster_centers_[:, 1], s=300, c='black', label='Centroids')# 5.画图plt.title('Clusters of customers')plt.xlabel('Annual Income')plt.ylabel('Spending Score')plt.legend()plt.show()if __name__ == '__main__':show_result()

今天的分享到此结束。

相关文章:

机器学习:聚类算法及实战案例

本文目录: 一、聚类算法介绍二、分类(一)根据聚类颗粒度分类(二)根据实现方法分类 三、聚类流程四、K值的确定—肘部法(一)SSE-误差平方和(二)肘部法确定 K 值 五、代码重…...

预览pdf(url格式和blob格式)

<template><div class"pdf-container"><div v-if"loading" class"loading-state"><a-spin size"large" /></div><div v-else-if"error" class"loading-state">加载失败&…...

【p2p、分布式,区块链笔记 MESH】 论文阅读 Thread/OpenThread Low-Power Wireless Multihop Net

paperauthorThread/OpenThread: A Compromise in Low-Power Wireless Multihop Network Architecture for the Internet of ThingsHyung-Sin Kim, Sam Kumar, and David E. Culler 目录 引言RPL 标准设计目标与架构设计选择与特性shortcomIngs of RPL设计选择的反面影响sImulta…...

for AC500 PLCs 3ADR025003M9903的安全说明

1安全说明 必须遵守特殊的环境条件(例如&#xff0c;由于爆炸性物质、重污染或腐蚀影响的危险区域)。必须在指定的技术数据和系统数据范围内处理和操作设备。该装置不含可维修部件&#xff0c;不得打开。除非另有规定&#xff0c;否则操作过程中必须关闭可拆卸的盖子。拒绝对不…...

moon游戏服务器-demo运行

下载地址 https://github.com/sniper00/MoonDemo redis安装 Redis-x64-3.0.504.msi 服务器配置文件 D:\gitee\moon_server_demo\serverconf.lua 貌似不修改也可以的&#xff0c;redis不要设置密码 windows编译 安装VS2022 Community 下载premake5.exe放MoonDemo\server\moon 双…...

前端(vue)学习笔记(CLASS 7):vuex

vuex概述 vuex是一个vue的状态管理工具&#xff0c;状态就是数据 大白话&#xff1a;vuex是一个插件&#xff0c;可以帮我们管理vue通用的数据&#xff08;多组件共享的数据&#xff09; 场景 1、某个状态在很多个组件来使用&#xff08;个人信息&#xff09; 2、多个组件…...

[特殊字符] 在 React Native 项目中封装 App Icon 一键设置命令(支持参数与默认路径)

📦 前置依赖 使用的是社区维护的 CLI 工具: @bam.tech/react-native-make它扩展了 react-native 命令,支持 set-icon 功能。 安装: yarn add -D "@bam.tech/react-native-make"🧠 封装目标 我们希望能够通过以下方式调用: # 默认使用 ./icon.png yarn …...

基于深度学习(Unet和SwinUnet)的医学图像分割系统设计与实现:超声心脏分割

基于深度学习的医学图像分割系统设计与实现 摘要 本文提出了一种基于深度学习的医学图像分割系统,该系统采用U-Net和Swin-Unet作为核心网络架构,实现了高效的医学图像分割功能。系统包含完整的训练、验证和推理流程,并提供了用户友好的图形界面。实验结果表明,该系统在医…...

Qt学习及使用_第1部分_认识Qt---学习目的及技术准备

前言 学以致用,通过QT框架的学习,一边实践,一边探索编程的方方面面. 参考书:<Qt 6 C开发指南>(以下称"本书") 标识说明:概念用粗体倾斜.重点内容用(加粗黑体)---重点内容(红字)---重点内容(加粗红字), 本书原话内容用深蓝色标识,比较重要的内容用加粗倾…...

如何把本地服务器变成公网服务器?内网ip网址转换到外网连接访问

​ 内网IP只能在本地内部网络连接访问&#xff0c;当本地搭建服务器部署好相关网站或应用后&#xff0c;在局域网内可以通过内网IP访问&#xff0c;但在外网是无法直接访问异地内网IP端口应用的&#xff0c;只有公网IP和域名才能实现互联网上的访问。那么需要如何把本地服务器变…...

Java+Access综合测评系统源码分享:含论文、开题报告、任务书全套资料

JAVAaccess综合测评系统毕业设计 一、系统概述 本系统采用Java Swing开发前端界面&#xff0c;结合Access数据库实现数据存储&#xff0c;专为教育机构打造的综合测评解决方案。系统包含学生管理、题库管理、在线测评、成绩分析四大核心模块&#xff0c;实现了测评流程的全自…...

湖北理元理律师事务所:债务咨询中的心理支持技术应用

债务危机往往伴随心理崩溃。世界卫生组织研究显示&#xff0c;长期债务压力下抑郁症发病率提升2.3倍。湖北理元理律师事务所将心理干预技术融入法律咨询&#xff0c;构建“法律方案心理支持”的双轨服务模型。 一、债务压力下的心理危机图谱 通过对服务对象的追踪发现&#x…...

时间序列预测:LSTM与Prophet对比实验

时间序列预测&#xff1a;LSTM与Prophet对比实验 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 时间序列预测&#xff1a;LSTM与Prophet对比实验摘要引言实验设计1. 数据集选择2. 实验流程 模型架构对比1. LSTM架…...

阿里云域名怎么绑定

阿里云服务器绑定域名全攻略&#xff1a;一步步轻松实现网站“零”障碍上线&#xff01; 域名&#xff0c;您网站在云端的“身份证”&#xff01; 在数字化浪潮中&#xff0c;拥有一个属于自己的网站或应用&#xff0c;是个人展示、企业运营不可或缺的一环。而云服务器&#x…...

能上Nature封面的idea!强化学习+卡尔曼滤波

2025深度学习发论文&模型涨点之——强化学习卡尔曼滤波 强化学习&#xff08;Reinforcement Learning, RL&#xff09;与卡尔曼滤波&#xff08;Kalman Filtering, KF&#xff09;的交叉研究已成为智能控制与状态估计领域的重要前沿方向。 强化学习通过试错机制优化决策策…...

Linux网桥实战手册:从基础配置到虚拟化网络深度优化

一、网桥基础操作全解析 1. 网桥生命周期管理 创建网桥的两种方式&#xff1a; # 传统brctl工具&#xff08;需安装bridge-utils&#xff09; brctl addbr br0 echo BRIDGEbr0 > /etc/sysconfig/network-scripts/ifcfg-br0# 现代iproute2工具链 ip link add name br0 typ…...

Design Theory and Method of Complex Products: A Review

abstract 摘要 Design is a high-level and complex thinking activity of human beings, using existing knowledge and technology to solve problems and create new things. With the rise and development of intelligent manufacturing, design has increasingly reflec…...

yaffs2目录搜索上下文数据结构struct yaffsfs_dirsearchcontext yaffsfs_dsc[] 详细解析

1. 目录搜索上下文&#xff08;Directory Search Context&#xff09; struct yaffsfs_dirsearchcontext 是 YAFFS2 文件系统中用于 目录遍历操作 的核心数据结构&#xff0c;专门管理 readdir() 等目录操作的状态。 结构体定义&#xff08;典型实现&#xff09; struct yaf…...

Markdown基础(1.2w字)

1. Markdown基础 这次就没目录了&#xff0c;因为md格式太乱了写示例&#xff0c;展示那些都太乱了&#xff0c;导致目录很乱。 &#xff08;我是XX&#xff0c;出现了很多错误&#xff0c;有错误和我说&#xff09; 1.1 Markdown简介 Markdown是一种轻量级的标记语言&#…...

LabVIEW与PLC液压泵测控系统

针对液压泵性能测试场景&#xff0c;采用LabVIEW与西门子 PLC 控制系统&#xff0c;构建高精度、高可靠性的智能测控系统。通过选用西门子 PLC、NI 数据采集卡、施耐德变频电机等&#xff0c;结合LabVIEW 强大的数据处理与界面开发能力&#xff0c;实现液压泵压力、流量、转速等…...

SQL-labs通关(level1-22)

SQL-labs靶场详解 靶场下载 靶场下载地址 关卡 level1联合注入 用order by语句来查询字段数 顺便提一下&#xff0c;使用联合注入语句union select也可以查询字段数&#xff0c;在不能使用order by的情况下&#xff0c;可以使用union select来查询字段数。这里我们通过查询…...

【HarmonyOS5】UIAbility组件生命周期详解:从创建到销毁的全景解析

⭐本期内容&#xff1a;【HarmonyOS5】UIAbility组件生命周期详解&#xff1a;从创建到销毁的全景解析 &#x1f3c6;系列专栏&#xff1a;鸿蒙HarmonyOS&#xff1a;探索未来智能生态新纪元 文章目录 前言生命周期全景图详细状态解析与最佳实践&#x1f3ac; Create状态&#…...

在命令行直接执行可以执行成功,加入crontab定时任务执行shell脚本不成功失败的问题解决方法

今天遇到在命令行直接执行可以执行成功&#xff0c;加入crontab定时任务执行shell脚本却不成功失败的问题&#xff0c;踩坑了很长时间 记录下我的解决方法 原来我的定时任务填写方式: [roottao ~]# crontab -l */10 * * * * /bin/sh /search/index.sh >>/dev/null 2&g…...

c++ 静态成员变量

Student.h头文件内容&#xff1a; #pragma once #include <string> using namespace std;class Student { public:string name;int score;static int totalScore; // 静态局部变量声明Student(string name, int score);~Student();void print() const; };Student.cpp源文…...

分布式爬虫代理IP使用技巧

最近我们讨论的是分布式爬虫如何使用代理IP。在我们日常的分布式爬虫系统中&#xff0c;多个爬虫节点同时工作&#xff0c;每个节点都需要使用代理IP来避免被目标网站封禁。怎么解决代理IP问题显得尤为重要。 我们知道在分布式爬虫中使用代理IP是解决IP封禁、提高并发能力和实…...

数据分析之OLTP vs OLAP

数据处理系统主要有两种基本方法&#xff1a;一种注重数据操作(增删查改)&#xff0c;另一种注重商业智能数据分析。 这两种系统是&#xff1a; 联机事务处理&#xff08;OLTP&#xff09; 联机分析处理&#xff08;OLAP&#xff09; Power BI专为与OLAP系统兼容而构建&…...

Flask音频处理:构建高效的Web音频应用指南

引言 在当今多媒体丰富的互联网环境中&#xff0c;音频处理功能已成为许多Web应用的重要组成部分。无论是音乐分享平台、语音识别服务还是播客应用&#xff0c;都需要强大的音频处理能力。Python的Flask框架因其轻量级和灵活性&#xff0c;成为构建这类应用的理想选择。 本文…...

powershell 安装 .netframework3.5

在 PowerShell 中安装 .NET Framework 3.5 可以通过几种不同的方法实现&#xff0c;取决于你的操作系统版本。以下是几种常见的方法&#xff1a; 方法1&#xff1a;使用 DISM 命令 对于 Windows 10 和 Windows 8.1&#xff0c;你可以使用 DISM&#xff08;Deployment Image Se…...

dvwa5——File Upload

LOW 在dvwa里建一个testd2.php文件&#xff0c;写入一句话木马&#xff0c;密码password antsword连接 直接上传testd2.php文件&#xff0c;上传成功 MEDIUM 查看源码&#xff0c;发现这一关只能提交jpg和png格式的文件 把testd2.php的后缀改成jpg&#xff0c;上传时用bp抓包…...

cv::FileStorage用法

cv::FileStorage 是 OpenCV 中的一个类&#xff0c;用于读取和写入结构化数据&#xff08;如 YAML、XML、JSON&#xff09;。它非常适合保存和加载诸如&#xff1a; 相机内参&#xff08;K、D&#xff09; 位姿&#xff08;R、T&#xff09; IMU 数据 配置参数 向量、矩阵、…...