机器学习(三)K-means聚类(手肘法、轮廓系数、可视化代码)

2023-11-19

K-means聚类

聚类是无监督学习当中非常重要的一部分,能够在没有标签的情况下将数据分类。说到聚类,最常用也是最重要的一个算法就是K-means算法。

算法介绍

K-means是一种非常简单快速高效的算法,只需要迭代几次即可。

其原理用一句话来说就是一个“标记实例,更新中心点”的循环。通过几次迭代达到收敛,但是往往是局部最优解。

这里也提出了一种k-means++的算法,这种方法使k-means收敛到最优解的可能性很小。其实一般直接调用sklearn的k-means默认就是k-means++算法,如果你想使用原来的k-means算法,将超参数设置为init=“random”即可

选择k值方法

k-means最重要的参数应该是类别数量了,也就是k值,一般寻找最优的k值有一下两种方法

手肘法

手肘法在很多选取最佳参数的方法中是很常见的,通过找到惯性(簇内平方和)的转折点来找到最佳k值

代码实例

from sklearn.cluster import KMeans
import pandas as pd
scores=[]
for i in range(2,8):  #这里根据你想要分成多少类来决定
    kmeans = KMeans(n_clusters=i)
    result_list = kmeans.fit_predict(data)
    score=kmeans.inertia_  #计算簇内平方和
    scores.append(score)
plt.plot(range(2,8),scores)
plt.show()
##可以看到最后在4这里有拐点所以最佳k是4

轮廓系数

我们希望达到的目的是”簇内差异小,簇外差异大“。轮廓系数刚好能作为衡量的标准,相对于手肘法来说,轮廓系数比较精确,但是也有其不适用的场景,比如不能用来比较不同算法。http://t.csdn.cn/0kYXQ这篇文章比较详细可以看看。

代码实例可以直接套用

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import pandas as pd
# 定义KMeans,以及K值
data=iris.data #这里用了鸢尾花数据集
scores=[]
for i in range(2,100):  
    kmeans = KMeans(n_clusters=i)
    result_list = kmeans.fit_predict(data)
    score = silhouette_score(data, result_list)
    scores.append(score)
plt.plot(range(2,100),scores)
print(pd.DataFrame(scores).idxmax()[0]+2) #轮廓系数越大越好(最大是1)
plt.show()

最后结果是这样的。

结果可视化

当我们确定好具体的k值后

import matplotlib.pyplot as plt 
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
n_clusters=4   #填你最终确定的k值
data=iris.data  #原始数据
kmeans=KMeans(n_clusters=k)
y_pred=kmeans.fit_predict(iris.data) #预测结果
for i in range(0,n_clusters):
    plt.scatter(data[y_pred==i,0], data[y_pred==i,1], marker='o', s=30)  #选取对应的点
plt.title('K-means 聚类散点图')

最后结果是这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习(三)K-means聚类(手肘法、轮廓系数、可视化代码) 的相关文章

  • 什么是“人机协同”机器学习?

    人机协同 HITL 是人工智能的一个分支 它同时利用人类智能和机器智能来创建机器学习模型 在传统的 人机协同 方法中 人们会参与一个良性循环 在其中训练 调整和测试特定算法 通常 它的工作方式如下 首先 对数据进行人工标注 这就为模型提供了
  • EasyV+UE创造数字孪生可视化新篇章!

    众所周知 UE是UNREAL ENGINE 虚幻引擎 的简写 由Epic开发 是世界知名授权最广的游戏引擎之一 EasyV是一款数据可视化应用平台 用户通过EasyV可以更高效的实现数据可视化项目搭建 产品内有丰富的模版 海量的组件 简单的
  • 如何使用 TensorFlow 实现 k-means?

    介绍教程使用内置的梯度下降优化器 非常有意义 然而 k 均值不仅仅是我可以插入梯度下降中的东西 看起来我必须编写自己的优化器 但考虑到 TensorFlow 原语 我不太确定如何做到这一点 我应该采取什么方法 注 您现在可以获得这段代码的更
  • Microsoft SQL 和 R、存储过程和 k-means

    我是新来的 希望能帮助和得到帮助 不过 我正在开发新的 Microsoft Sql Server Management Studio 2016 使用其意味着与 R 集成的新功能 首先 我的目标是创建一个存储过程 该存储过程使用 x 和 y
  • Pyspark:在数据帧的不同组上应用 kmeans

    使用 Pyspark 我想将 kmeans 单独应用于数据帧组 而不是立即应用于整个数据帧 目前 我使用 for 循环对每个组进行迭代 应用 kmeans 并将结果附加到另一个表 但是有很多组会很耗时 有人可以帮我吗 多谢 for cust
  • scikit-learn k-means:预测方法的真正作用是什么?

    当我使用 scikit learn 的 k means 实现时 我通常只调用fit 方法 这足以获得聚类中心和标签 这predict 方法用于计算标签 甚至fit predict 方法是为了方便起见 但如果我只能使用fit 目的是什么pre
  • 如何在R编程中显示同一坐标中的总数

    更新2017年9月11日问题 这是我在 R 中集群 kmode 的代码 library klaR setwd D kmodes data to cluster lt read csv kmodes csv header TRUE sep c
  • kmean 需要三角不等式吗?

    我想知道对于 kmeans 中使用的距离度量是否需要三角不等式 k 均值是designed for 欧几里得距离 正好满足三角不等式 使用其他距离函数是有风险的 因为它可能会停止收敛 然而原因是not三角不等式 但是平均值可能不会最小化距离
  • 山西电力市场日前价格预测【2024-01-09】

    日前价格预测 预测说明 如上图所示 预测明日 2024 01 09 山西电力市场全天平均日前电价为314 92元 MWh 其中 最高日前电价为593 66元 MWh 预计出现在18 15 最低日前电价为54 95元 MWh 预计出现在13
  • 2020年认证杯SPSSPRO杯数学建模C题(第二阶段)抗击疫情,我们能做什么全过程文档及程序

    2020年认证杯SPSSPRO杯数学建模 C题 抗击疫情 我们能做什么 原题再现 2020 年 3 月 12 日 世界卫生组织 WHO 宣布 席卷全球的冠状病毒引发的病毒性肺炎 COVID 19 是一种大流行病 世卫组织上一次宣布大流行是在
  • 如何用GPT制作PPT和写代码?

    详情点击链接 如何用GPT制作PPT和写模型代码 一OpenAI 1 最新大模型GPT 4 Turbo 2 最新发布的高级数据分析 AI画图 图像识别 文档API 3 GPT Store 4 从0到1创建自己的GPT应用 5 模型Gemin
  • 基于GPT4+Python近红外光谱数据分析及机器学习与深度学习建模

    详情点击链接 基于ChatGPT4 Python近红外光谱数据分析及机器学习与深度学习建模教程 第一 GPT4 基础 1 ChatGPT概述 GPT 1 GPT 2 GPT 3 GPT 3 5 GPT 4模型的演变 2 ChatGPT对话初
  • R - “princomp”只能与比变量更多的单位一起使用

    我正在使用 R 软件 R Commander 对我的数据进行聚类 我的数据有一个较小的子集 包含 200 行和大约 800 列 尝试 kmeans 聚类并在图表上绘制时出现以下错误 princomp 只能与比变量更多的单位一起使用 然后我创
  • 机器学习:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 机器学习算法实战案例:时间序列数据最全的预处理方法总结

    文章目录 1 缺失值处理 1 1 统计缺失值 1 2 删除缺失值 1 3 指定值填充 1 4 均值 中位数 众数填充
  • 开始弃用NeRF?为什么Gaussian Splatting在自动驾驶场景如此受欢迎?(浙江大学最新)...

    点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 今天自动驾驶之心为大家分享浙大刚刚出炉的3D Gaussian Splatting综述 文章首先回顾了3D Gaussian的原理和应用 借着全面比较了3D GS在静态
  • 5_机械臂运动学基础_矩阵

    上次说的向量空间是为矩阵服务的 1 学科回顾 从科技实践中来的数学问题无非分为两类 一类是线性问题 一类是非线性问题 线性问题是研究最久 理论最完善的 而非线性问题则可以在一定基础上转化为线性问题求解 线性变换 数域 F 上线性空间V中的变
  • 剪影分数怎么可能是负数?

    如果我们有一些数据点 例如 我们使用 k means 进行分段 所得到的线段是否不是每个点都最接近其各自簇的质心 如果是这样 当 Silhouette Score 比较 ai 到簇内点的平均距离 和 bi 到簇外点的平均距离 时 怎么会出现
  • Apache Spark MLLib - 使用 IDF-TF 向量运行 KMeans - Java 堆空间

    我正在尝试从 大 文本文档集合 TF IDF 向量 在 MLLib 上运行 KMeans 文档通过 Lucene 英语分析器发送 稀疏向量由 HashingTF transform 函数创建 无论我使用的并行程度如何 通过合并函数 KMea
  • 如何在 k 均值中使用欧氏距离以外的不同距离公式

    我正在处理纬度经度数据 我必须根据两点之间的距离进行聚类 现在两个不同点之间的距离是 ACOS SIN lat1 SIN lat2 COS lat1 COS lat2 COS lon2 lon1 6371 我想在 R 中使用 k 均值 有什

随机推荐

  • 用Java实现五子棋对弈

    目录 题目展示 题目分析 代码实现 结果展示 题目展示 1 使用二维数组存储五子棋棋盘 如下图 2 在控制台通过Scanner输入黑白棋坐标 表示二维数组坐标 使用实心五角星和空心五角星表示黑白棋子 如下图 输入后重新输出棋盘如下图 白棋输
  • MySQL表的操作

    MySQL表的操作 创建表 查看表结构的详细信息 修改表结构 增加表结构属性 删除表结构 表结构的修改 删除表结构 创建表 语法 create table table name field1 datatype comment xxxxx f
  • 多线程太可怕了

    今天发现了一个多线程引起的bug 然后进一步体会到 这东西太容易出问题了 首先要说明的是 出问题的代码可不是一般人写的 是由一个叫EPAM systems的世界知名外包公司的人写的 这些java程序员个个经验丰富 心高气傲 貌似base在乌
  • 久坐不运动易导致低血压

    近年来 越来越多的年轻人患上了体质性低血压 大多是由于久坐不运动和营养不 够 两大原因造成的 现在 不少年轻人缺乏体育锻炼 一天到晚屁股总粘着凳子 久而久之 血管的活动也随之减少 使得血管的反应能力慢慢变差 一个简单的蹲下 站立动作也会使得
  • SEM代码篇----R详细实现(SEM 2)

    SEM代码篇 R详细实现 1 step1 安装包 install packages lavaan install packages semPlot install packages semTools rm list ls 清除所有变量 li
  • Doris节点扩容及数据表

    扩容和缩容 上篇文章简单讲了doris的安装 本章分享的是doris中fe和be节点的扩容缩容以及doris的数据表 1 FE 扩容和缩容 使用 MySQL 登录客户端后 可以使用 sql 命令查看 FE 状态 目前就一台 FE mysql
  • git学习心得

    git是一款十分有用的版本控制软件 程序员必备 http www liaoxuefeng com wiki 0013739516305929606dd18361248578c67b8067c8c017b000 001374325691607
  • LeetCode第79题:单词搜索

    给定一个 m x n 二维字符网格 board 和一个字符串单词 word 如果 word 存在于网格中 返回 true 否则 返回 false 单词必须按照字母顺序 通过相邻的单元格内的字母构成 其中 相邻 单元格是那些水平相邻或垂直相邻
  • 中国人民大学计算机系孙辉,张静(中国人民大学信息学院计算机系讲师)_百度百科...

    张静 中国人民大学信息学院计算机系讲师 语音 编辑 锁定 讨论 上传视频 本词条缺少概述图 补充相关内容使词条更完整 还能快速升级 赶紧来编辑吧 张静 现任中国人民大学信息学院计算机系讲师 1 中文名 张静 毕业院校 比利时鲁汶大学学位 学
  • 最详细的Java知识点--Map集合

    Map 主要内容 Map集合 目标 能够说出Map集合特点 使用Map集合添加方法保存数据 使用 键找值 的方式遍历Map集合 使用 键值对 的方式遍历Map集合 能够使用HashMap存储自定义键值对的数据 能够使用HashMap编写斗地
  • java错误和异常

    错误 error 非常严重 不处理无法编译 不过很容易处理 一般也就是变量名错误 函数写错了这些 还有就是内存 环境问题了 异常 Exception 编译时异常 必须使用try catch才能运行 比如IOException SQLExce
  • Java--- Java 中的线程,一般执行完成后就会自动销毁

    关于 Java 中的线程 一般执行完成后就会自动销毁 程序会终止 如下测试代码 public class Test implements Runnable public static void main final String args
  • Unity 2D 碰撞检测位置,生成烟雾实例化

    ContactPoint2D contact p collision contacts 0 Quaternion rot Quaternion FromToRotation Vector3 up contact normal Vector3
  • ubuntu安装最新版docker简易教程

    Ubuntu Docker 安装 Docker Engine Community 支持以下的 Ubuntu 版本 Xenial 16 04 LTS Bionic 18 04 LTS Cosmic 18 10 Disco 19 04 其他更新
  • pyecharts源码解读(17)HTML组件包components之表格组件Table

    当前pyecharts的版本为1 9 0 components包概述 components包位于pyecharts包顶级目录中 用于定义pyecharts的HTML组件 包结构如下 components HTML组件包 image py 定
  • python注意事项2

    工具pycharm 1 字符串的方法 hello str hello world 以什么开始 hello str startwith h 以什么结束 hello str endwith 去除空白字符 string lstrip 去除左边的空
  • 【Docker网络】Docker的容器互联

    Docker网络 Docker的容器互联 一 Docker容器互联介绍 1 1 Docker容器互联简介 1 2 Docker容器互联方式 二 本次实践介绍 2 1 本地环境规划 2 2 本次实践介绍 三 默认网络下的容器互联 3 1 默认
  • ABB PFEA111-20 3BSE050090R20处理器模块

    处理能力 PFEA111 20 处理器模块可能具备高性能的处理能力 能够执行复杂的控制算法 逻辑运算和数据处理任务 多通道输入输出 该模块可能会提供多个数字或模拟输入通道 用于监测外部信号 以及多个输出通道 用于控制执行器和设备 通信接口
  • 测试自动化面试题

    Python python有哪些数据类型 Python支持多种数据类型 包括以下常见的数据类型 数字类型 整数 int 浮点数 float 和复数 complex 字符串类型 由字符组成的不可变序列 使用引号 单引号或双引号 括起来 列表
  • 机器学习(三)K-means聚类(手肘法、轮廓系数、可视化代码)

    K means聚类 聚类是无监督学习当中非常重要的一部分 能够在没有标签的情况下将数据分类 说到聚类 最常用也是最重要的一个算法就是K means算法 算法介绍 K means是一种非常简单快速高效的算法 只需要迭代几次即可 其原理用一句话