Matlab|基于手肘法的kmeans聚类数的精确识别【K-means聚类】

2024-06-16 14:28

本文主要是介绍Matlab|基于手肘法的kmeans聚类数的精确识别【K-means聚类】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   主要内容   

在电力系统调度研究过程中,由于全年涉及的风、光和负荷曲线较多,为了分析出典型场景,很多时候就用到聚类算法,而K-means聚类就是常用到聚类算法,但是对于K-means聚类算法,需要自行指定分类数,如果没有方法支撑、纯自行确定分类数的话,显得随意性较大,很难令人信服,本次介绍一个方法——手肘法。

方法介绍

手肘法,很形象的命名方式,通过该方法得到的误差曲线类似手肘曲线,就以手肘位置的数作为最佳分类数。下面结合曲线特点来具体分析:

在 K-means 算法聚类过程中,分类数 k 值越大,样本数据被划分得越为精细,各类内样本数据的聚合程度越高,对应得到的误差平方和 SSE 值越小。在 k~SSE折线关系图中,折线的变化情况分为两个阶段:第一阶段,当 k 值小于最优分类数时,随着k值的增长,SSE 值越来越小,变化的幅度比较大,反映到 k~SSE 折线关系图中就是相邻两点之间的连线较陡。第二阶段,当 k 值大于最优分类数后,伴随着 k 值的增长,SSE 值仍是越来越小,但变化的幅度却比较小,反映到折线关系图中就是相邻两点之间的连线较为平缓。因此,随着k值的增长,k值与SSE 值的折线图会呈“手肘形”,而“肘部”对应的k 值即为最优分类数。下图中,最优分类数为肘部部位对应的4 。

SSE为,其计算公式为:

其中,Ci是第i个类,p是Ci类中的所有样本点,mi是Ci类的质心。

程序亮点

  1. 程序内置风电功率和光伏发电功率的拉丁超立方抽样算法,形成了数据集。
  2. 明确了数据更改方式,增加了详尽的修改方法注释,方便上手改成自己的数据。
  3. 可以得到不同聚类场景的概率以及聚类中心数据,程序注释清楚,方便研究使用。
  4. 采用两种方式进行分析,第一种是全年365天实测风力数据,第二种是拉丁超立方抽样方式​。

  部分代码   

clc;clear all
% 基于LHS的可再生能源出力场景生成
ns=1000;
wind_predict = [339,287,449,471,512,530,527,641,634,519,401,634,589,530,512,505,206,85,81,80,83,110,353,523];%风电预测
pv_predict = [0,0,0,0,0,0,99,137,150,178,189,191,176,171,138,104,77,0,0,0,0,0,0,0 ];%光伏预测
wind_equ = 800 * ones(1,24);%风机装机容量
pv_equ = 240 * ones(1,24);%光伏装机容量
wind_sigma = 0.2 * wind_predict + 0.02* wind_equ ;
pv_sigma = 0.2 * pv_predict + 0.02 * pv_equ ; % 预测偏差的标准差
m1=ones(24,1000);%风生成
m2=ones(24,1000);%光生成
m=ones(24,1000);%可再生生成
wind_covariance_matrix = zeros (24,24);
pv_covariance_matrix = zeros (24,24);
for i= 1:24wind_covariance_matrix(i,i) = wind_sigma(i)^2;pv_covariance_matrix(i,i) = pv_sigma(i)^2;
end
​
for t=1:24m1(t,:)=lhsnorm(0,wind_sigma(t),ns);%拉丁超立方采样m2(t,:)=lhsnorm(0,pv_sigma(t),ns);
end
mpw=m1+wind_predict.';
mpv=m2+pv_predict.';
%手肘法确定k值
data = mpw';
%修改成自己的数据集的方式如下

  结果一览   

第一种:全年365天实测风力的效果图

第二种:拉丁超立方抽样​

下载链接

这篇关于Matlab|基于手肘法的kmeans聚类数的精确识别【K-means聚类】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066691

相关文章

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87