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

kmeans 最佳聚类个数 | 轮廓系数(越大越好)

轮廓系数越大,表示簇内实例之间紧凑,簇间距离大,这正是聚类的标准概念。

  • 簇内的样本应该尽可能相似。
  • 不同簇之间应该尽可能不相似。

目的:鸢尾花数据进行kmeans聚类,最佳聚类个数是多少?

plot(iris[,1:4], col=iris$Species)
在这里插入图片描述

1. 标准化很重要

假设已经知道最佳是3类,

  • 使用原始数据做kmeans,和原始标签不一致的很多。
  • 如果做了标准化,kmeans的分类结果和原始标签一模一样。

(1). raw dat (错了好多)

dat=iris[, 1:4]
rownames(dat) = paste0("obs", 1:nrow(dat))
dat[1:3,]km_model <- kmeans( dat, centers = 3)# 获取分类结果
predictions <- km_model$cluster
table(predictions)dat$origin=iris$Species
dat$pred=predictionstable(dat$origin, dat$pred)
#           1  2  3
#setosa      0  0 50
#versicolor 48  2  0
#virginica  14 36  0plot(dat$Sepal.Length, dat$Sepal.Width, col=dat$origin, pch=19)
plot(dat$Sepal.Length, dat$Sepal.Width, col=dat$pred, pch=19)

(2). normalized dat (几乎全对)

dat=iris[, 1:4]
rownames(dat) = paste0("obs", 1:nrow(dat))
dat[1:3,]dat=apply(dat, 1, function(x){x/sum(x) * 1e4
}) |> t()  |> as.data.frame()
head(dat)# 行作为观测值
km_model <- kmeans( dat, centers = 3)# 获取分类结果
predictions <- km_model$cluster
table(predictions)dat$origin=iris$Species
dat$pred=predictionstable(dat$origin, dat$pred)
#             1  2  3
#setosa     50  0  0
#versicolor  0 45  5
#virginica   0  0 50

2. 最佳分类数

(0) 预处理

dat=iris[, 1:4]
rownames(dat) = paste0("obs", 1:nrow(dat))
dat[1:3,]dat=apply(dat, 1, function(x){x/sum(x) * 1e4
}) |> t()  |> as.data.frame()
head(dat)

(1) factoextra - silhouette: n=2

library(factoextra)
tmp = factoextra::fviz_nbclust( dat, kmeans, method = "silhouette")
#str(tmp)
tmp #图# fviz_nbclust(dat, kmeans, method = "silhouette", k.max = 20)

在这里插入图片描述

(2) 碎石图: n=2

# 在一个循环中进行15次的kmeans聚类分析
{
totalwSS=vector(mode = "numeric", 15)
for (i in 1:15){t1= kmeans(dat, i)totalwSS[i] <- t1$tot.withinss
}
# 聚类碎石图 - 使用plot函数绘制total_wss与no-of-clusters的数值。
plot(x=1:15,                         # x= 类数量, 1 to 15totalwSS,                      #每个类的total_wss值col="navy", lwd=2,type="b"                       # 绘制两点,并将它们连接起来
)
}

在这里插入图片描述

(3) silhouette 画图: n=2?

逐个画:

# 逐个画轮廓系数
library(cluster)
dis = dist(dat) #行之间的距离
#
n=3
kclu <- kmeans(dat, centers = 3, nstart=25)
kclu.sil=sortSilhouette( silhouette(kclu$cluster, dist = dis) )
plot(kclu.sil, col =1:n, #c("red", "orange", "blue"), main="")#
n=4
#library(cluster)
#dis = dist(dat) #行之间的距离
kclu <- kmeans(dat, centers = n, nstart=25)
kclu.sil=sortSilhouette( silhouette(kclu$cluster, dist = dis) )
plot(kclu.sil, col =1:n, # c("red", "orange", "blue"), main="")
#
#
n=8
#library(cluster)
#dis = dist(dat) #行之间的距离
kclu <- kmeans(dat, centers = n, nstart=25)
kclu.sil=sortSilhouette( silhouette(kclu$cluster, dist = dis) )
plot(kclu.sil, col =1:n, # c("red", "orange", "blue"), main="")
#

在这里插入图片描述

批量计算:

silhouette_score <- function(k){km <- kmeans(dat, centers = k, nstart=25)ss <- silhouette(km$cluster, dist(dat))mean(ss[, 3])
}
k <- 2:15
avg_sil <- sapply(k, silhouette_score)
plot(k, avg_sil, type='b',xlab='Number of clusters', ylab='Average Silhouette Scores', frame=FALSE)

在这里插入图片描述

最大是2,其次是3类。

根据本文图1,忽略颜色,只看数值分布,确实最佳是2类。

用标准化后的数据呢?
plot(dat, col=iris$Species, main="Normalized data")
在这里插入图片描述

plot(dat,main="Normalized data")

结论不变:如果忽略颜色,依旧是很清晰的2类。
在这里插入图片描述

(4) pam 是一种更稳定的 kmeans

Partitioning Around Medoids:
Partitioning (clustering) of the data into k clusters “around medoids”, a more robust version of K-means.

# 最佳分类数:
Ks=sapply(2:15, function(i){summary(silhouette(pam(dat, k=i)))$avg.width
})
plot(2:15,Ks,xlab="k",ylab="av. silhouette",type="b", pch=19)效果:
t1=pam(dat, k=3)
> table(t1$clustering, iris$Species)   setosa versicolor virginica1     50          0         02      0         44         03      0          6        50
还是有几个错的。

End

相关文章:

kmeans 最佳聚类个数 | 轮廓系数(越大越好)

轮廓系数越大&#xff0c;表示簇内实例之间紧凑&#xff0c;簇间距离大&#xff0c;这正是聚类的标准概念。 簇内的样本应该尽可能相似。不同簇之间应该尽可能不相似。 目的&#xff1a;鸢尾花数据进行kmeans聚类&#xff0c;最佳聚类个数是多少&#xff1f; plot(iris[,1:4…...

【纪念365天】我的创作纪念日

过去的一年 没有注意加入csdn已经有一年了。 这几天翻看小猴儿的通知才发现时间来到了一年的纪念日。稍稍思索想要将这一段时间的学习到的知识以及偶然遇到的机遇做一下总结。 上一次写纪念日是来到csdn128天的时候&#xff0c; 200天前我的学习状态是非常疯狂的。 只记得我当时…...

Opencv+ROS实现颜色识别应用

目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像&#xff1a;RGB&#xff08;红&#xff0c;绿&#xff0c;蓝&#xff09; HSV图像&#xff1a;H&#xff0…...

蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列&#xff0c;要求尽可能少地添加若干括号使得括号序列变得合…...

C++设计模式(单例模式)

一、介绍 1.动机 在软件系统中&#xff0c;经常有这样一些特殊的类&#xff0c;必须保证它们在系统中只存在一个实例&#xff0c;才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器&#xff0c;提供一种机制来保证一个类只有一个实例? 这应该是类设计者的…...

前端---CSS(部分用法)

HTML画页面--》这个页面就是页面上需要的元素罗列起来&#xff0c;但是页面效果很差&#xff0c;不好看&#xff0c;为了让页面好看&#xff0c;为了修饰页面---》CSS CSS的作用&#xff1a;修饰HTML页面 用了CSS之后&#xff0c;样式和元素本身做到了分离的效果。---》降低了代…...

2024年最新版Java八股文复习

最新版本Java八股文复习&#xff0c;每天更新一篇&#xff0c;博主正在持续努力更新中~~~ 一、Java基础篇1、怎么理解面向对象&#xff1f;简单说说封装、继承、多态三大特性&#xff1f;2、多态体现在哪几个方面&#xff1f;3、面向对象的设计原则你知道有哪些吗&#xff1f;4…...

计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

MyBatis高级扩展

一、Mapper批量映射优化: 1.需求: Mapper 配置文件很多时&#xff0c;在全局配置文件中一个一个注册太麻烦&#xff0c;希望有一个办法能够一劳永逸 2.配置方式: Mybatis允许在指定Mapper映射文件时&#xff0c;只指定其所在的包: <mappers><package name"c…...

代码美学2:MATLAB制作渐变色

效果&#xff1a; %代码美学&#xff1a;MATLAB制作渐变色 % 创建一个10x10的矩阵来表示热力图的数据 data reshape(1:100, [10, 10]);% 创建热力图 figure; imagesc(data);% 设置颜色映射为“cool” colormap(cool);% 在热力图上添加边框 axis on; grid on;% 设置热力图的颜色…...

浅谈- “ 变量中 无符号 与 有符号 的 值转换 ”

在同一个表达式中&#xff0c;若同时出现 无符号变量 与 有符号变量 &#xff1a; 1、都转换为无符号类型&#xff1a;&#xff08;注&#xff1a;2^324294967296&#xff09;即unsigned int 的最大值 2、然后再运行表达式 实例&#xff1a; #include <stdio.h>char fun(…...

【AI绘画】Midjourney进阶:色调详解(上)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;Midjourney中的色彩控制为什么要控制色彩&#xff1f;为什么要在Midjourney中控制色彩&#xff1f; &#x1f4af;色调白色调淡色调明色调 &#x1f4af…...

代码管理之Gitlab

文章目录 Git基础概述场景本地修改未提交&#xff0c;拉取远程代码修改提交本地&#xff0c;远程已有新提交 GitIDEA引入Git拉取仓库代码最后位置 Git基础 概述 workspace 工作区&#xff1a;本地电脑上看到的目录&#xff1b; repository 本地仓库&#xff1a;就是工作区中隐…...

防御网络攻击的创新策略

关键要点 ● 了解各种类型的网络攻击对于组织加强防御至关重要。 ● 制定敏捷的网络安全策略可帮助企业快速应对新出现的威胁。 ● 跨行业协作和威胁情报共享可以增强整体安全性。 网络攻击威胁日益严重 网络攻击的数量和复杂程度急剧增加&#xff0c;对全球组织构成了重大…...

C++软件设计模式之组合模式概述

组合模式&#xff08;Composite Pattern&#xff09;是C软件设计模式中的一种&#xff0c;主要用于解决对象的层次结构问题。它允许你将对象组合成树形结构来表示“部分-整体”的层次结构&#xff0c;使得客户端可以统一地处理单个对象和组合对象。 主要用于解决的问题&#x…...

利用HTML5和CSS来实现一个漂亮的表格样式

利用HTML5和CSS来实现一个漂亮的表格样式 第一步&#xff1a;创建HTML结构第二步&#xff1a;添加CSS样式第三步&#xff1a;响应式设计第四步&#xff1a;加入交互效果 第一步&#xff1a;创建HTML结构 我们将用HTML创建一个基本的表格结构。代码如下&#xff1a; <!DOCT…...

Vivado程序固化到Flash

在上板调试FPGA时&#xff0c;通常使用JTAG接口下载程序到FPGA芯片中&#xff0c;FPGA本身是基于RAM工艺的器件&#xff0c;因此掉电后会丢失芯片内的程序&#xff0c;需要重新烧写程序。但是当程序需要投入使用时不能每一次都使用JTAG接口下载程序&#xff0c;一般FPGA的外围会…...

HCIA笔记3--TCP-UDP-交换机工作原理

1. tcp协议 可靠的连接 1.1 报文格式 1.2 三次握手 1.3 四次挥手 为什么TIME_WAIT需要2MSL的等待时间&#xff1f; &#xff08;a&#xff09; 为了实现可靠的关闭 &#xff08;b&#xff09;为了让过期的报文在网络上消失 对于(a), 假设host发给server的last ack丢了。 ser…...

计算机网络的功能

目录 信息交换 资源共享 分布式处理 可靠性增强 集中管理 信息交换 计算机网络最基本的功能之一是允许不同设备之间的数据通信。这包括电子邮件的发送和接收、即时消息的传递、文件传输等。通过网络&#xff0c;用户可以轻松地与全球各地的其他人进行沟通和协作。 信息交…...

Redis设计与实现第14章 -- 服务器 总结(命令执行器 serverCron函数 初始化)

14.1 命令请求的执行过程 一个命令请求从发送到获得回复的过程中&#xff0c;客户端和服务器都需要完成一系列操作。 14.1.1 发送命令请求 当用户在客户端中输入一个命令请求的时候&#xff0c;客户端会把这个命令请求转换为协议格式&#xff0c;然后通过连接到服务器的套接字…...

思特威推出全新升级8K16K高分辨率工业线阵CMOS图像传感器

思特威&#xff08;上海&#xff09;电子科技股份有限公司&#xff08;股票简称&#xff1a;思特威&#xff0c;股票代码&#xff1a;688213&#xff09;近日宣布&#xff0c;全新推出8K和16K超高分辨率高速线阵CMOS图像传感器——SC835LA&SC1635LA。两款新品均基于思特威S…...

BetterNCM安装器:告别手动安装烦恼,轻松管理网易云音乐插件

BetterNCM安装器&#xff1a;告别手动安装烦恼&#xff0c;轻松管理网易云音乐插件 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 你是否曾为网易云音乐的手动插件安装而烦恼&#xf…...

蚂蚁数科发布“龙虾卫士”,护航OpenClaw智能体安全落地

随着AI智能体技术加速渗透企业核心业务场景&#xff0c;以OpenClaw为代表的自主执行型AI正成为新一轮生产力变革的重要引擎。然而&#xff0c;其强大的系统访问与任务执行能力也带来了前所未有的安全风险——权限越界、记忆污染、恶意诱导、算力滥用等问题日益凸显。部分企业在…...

智能审稿监控工具如何解决技术文档追踪痛点:效率提升实测

智能审稿监控工具如何解决技术文档追踪痛点&#xff1a;效率提升实测 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 当技术文档工程师张明第5次在浏览器标签页中切换查找最新审稿状态时&#xff0c;他意识到这种工…...

企业微信内部应用开发实战:从零到一用UniApp搞定授权登录(附完整代码)

企业微信内部应用开发实战&#xff1a;UniApp授权登录全流程解析 企业微信作为国内领先的企业级通讯工具&#xff0c;其内部应用开发能力正成为企业数字化转型的重要抓手。对于熟悉UniApp框架但初次接触企业微信生态的开发者而言&#xff0c;如何高效实现授权登录往往是项目落地…...

基于小波与神经网络均衡算法对比研究:多径衰弱信道下的性能分析(MATLAB仿真)

基于小波和神经网络的均衡算法&#xff0c;matlab仿真程序。 (1)中信道要求多径衰弱信道。 (2)中信道传统电话信道模型&#xff0c;(2)中和神经网络常模盲均衡算法对比。 结果图为均方误差&#xff0c;码间干扰&#xff0c;稳态误差对比图当然可以&#xff0c;以下是一篇基于您…...

“靠自己赚钱,适合大学生做的16种副业”,零基础入门到精通,收藏这篇就够了

这里我给大家推荐几个适合大学生在学校就能做的副业&#xff0c;不用花钱&#xff0c;只要肯做&#xff0c;一个月赚点生活费肯定没问题&#xff0c;也不耽误学业。 主要分为线上跟线下&#xff0c;先说先上能做的。 1&#xff0c;正规的招聘平台去找兼职 国内比较大的网站像…...

中断响应延迟<8μs,待机电流压至12μA,低轨终端C功耗优化全链路拆解,含GCC内联汇编禁忌清单

第一章&#xff1a;低轨卫星终端C语言功耗优化方案概览低轨卫星终端受限于星载电源容量、散热能力与任务时长&#xff0c;其嵌入式软件的功耗表现直接影响在轨寿命与通信可靠性。C语言作为终端固件开发的主流语言&#xff0c;其运行时能耗不仅取决于硬件平台&#xff0c;更与代…...

三相锁相环C语言实现与仿真验证:从理论到代码的完整指南

1. 三相锁相环基础与核心原理 三相锁相环&#xff08;PLL&#xff09;是电力电子和电机控制中的关键组件&#xff0c;它的核心任务是从三相交流信号中准确提取频率和相位信息。想象一下&#xff0c;你正在尝试用收音机调频&#xff0c;锁相环就像那个自动锁定电台频率的智能电路…...

ViT中的Patch Embedding:从图像分割到向量映射的完整代码解析(PyTorch版)

ViT中的Patch Embedding&#xff1a;从图像分割到向量映射的完整代码解析&#xff08;PyTorch版&#xff09; 当计算机视觉遇上Transformer架构&#xff0c;一场革命悄然发生。传统卷积神经网络&#xff08;CNN&#xff09;长期统治的视觉领域&#xff0c;如今被Vision Transfo…...