模糊c均值聚类_模式识别:K均值算法&模糊c均值算法的应用

2023-11-02


  1.背景介绍

在实际应用场景中我们会遇见很多无监督分类的任务,样本不具有类别标注,我们无法通过有监督学习设计分类器。基于样本间相似性度量的聚类方法是无监督学习的重要组成部分。一般来说,聚类准则是根据样本之间的距离或相似程度来定义的,通常将相似或者相近的样本分成一类,从而实现整体样本的分类。下面我们将介绍K均值与模糊C均值两种经典的动态聚类算法。

2.模型建立以及求解方法

2.1K均值算法

K均值聚类算法是应用最广泛的基于划分的聚类算法之一,适用于处理大样本数据。它根据样本间的距离作为相似度的度量,目标是根据输入参数K将数据集划分为K簇,所以称之为K均值聚类。K均值算法简单易用,在处理分布接近球体的样本时具有较好的聚类效果。

K均值算法采用迭代更新的方法,在每一轮中根据K个聚类中心将样本分成K簇,并将每个簇的质心作为下一次迭代的参考点。数次迭代后,算法就能够得到效果较好的聚类中心。算法流程图如下:

49d8fbe493efb38de1560543a8ea8d48.png

2.2模糊C均值算法

K均值聚类属于硬聚类算法,把数据点划分到确切的某一聚类中。而模糊C均值算法(Fuzzy C-Means,以下简称FCM算法)属于软聚类,也就是说一条样本与不同类之间具有不同的隶属度。隶属度是衡量样本隶属于某一集合的程度的表现,值域范围为。

FCM的目标函数是把m个样本分为c个模糊集合,并给出聚类中心,使得代价函数的值最小。我们构建一个隶属矩阵,其中表示第i条样本对于第j个模糊集合的隶属度。FCM进行归一化约束后,样本数据属于所有类的隶属度的总和应该等于1,即:

FCM的目标函数定义为:

其中,为第j个模糊集合的聚类中心;表示第i条样本与第j个聚类中心间的欧式距离,这里作为一个加权指数;为柔性参数。我们需要让目标函数达到最小,此时的必要条件为:

其中,是(1)的m个约束式的拉格朗日乘数。

我们对输入参量进行求导,从而得到目标函数达到最小值的条件:

根据上式,我们可以不断进行迭代,计算出新的聚类中心和隶属度矩阵。当代价函数小于某个阈值或者与上一代的代价函数值的变化小于某个阈值,则算法停止。算法流程图如下:

4246c1cb19e715eab5bff744163df486.png

得到最终的隶属矩阵后,可以对m条样本根据最大隶属度进行划分,即一条样本与哪个模糊集合的隶属度最大就将该样本划分到那个类。FCM算法的柔性参数是对算法起控制作用,如果其过大将导致算法难以收敛;如果过小会使算法失去模糊效果,导致性能接近K均值算法。

2.3评价准则:纯度

对于一个聚类集合i,指的是i中成员属于类(class)j 的概率。

其中是聚类i中样本的个数。聚类i的纯度(purity)定义为

整个聚类划分的纯度为

其中K是聚类的数目,m是整个聚类划分的样本数。纯度在[0,1]之间,越接近1,说明聚类的正确率越高。以下我们将用纯度来评价聚类效果。

3.实验

3.1实验环境

本文使用 python3.7 进行编程仿真,并使用了 sklearn、numpy、matplotlib 等 python 库。

3.2iris数据集分类

老朋友iris 数据集中包含了 3 类鸢尾花特征数据。每一类分别有 50 条样本,每条样本有 4 个维度的特征数据(花萼长度,花萼宽度,花瓣长度,花瓣宽度)。

3.2.1iris数据集k均值分类

我们设定k值为3,进行k均值分类。首先,采用150个具有四维特征的样本进行实验,并求得每次聚类的整体纯度。进行十次实验求取平均值,平均纯度为0.8273。可以发现,每次进行聚类时,平均迭代8.86次算法达到收敛,且收敛后得到的聚类效果与初始聚类中心的关系较大,具有一定的随机性。

然后,我们分别采用花萼长度与宽度,花瓣长度与宽度进行聚类,并进行可视化分析。

我们对花萼长度、宽度这两个特征,对150条样本进行比较。如下图所示,可以发现第一类鸢尾花与第二、三两类区分较大。而第二、三两类鸢尾花之间在花萼宽度 上差异较小,难以直接区分,第三类鸢尾花的花萼长度整体较长。

6dcb0ad8f7f4ae16e33aad5aad803099.png

进行K均值聚类后,我们可以得到某次实验的聚类划分图,其中红色的“x”表示聚类中心:

0cb9c2f0ba29c856073717dab1f84875.png

多次实验我们可以得到平均纯度为0.816,平均迭代次数为10.2次
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模糊c均值聚类_模式识别:K均值算法&模糊c均值算法的应用 的相关文章

  • PostgreSQL:“more than one owned sequence found“异常问题解决

    问题 本地数据库正常 但还原部署到服务器数据库后 添加表记录时提示 more than one owned sequence found 的异常报错 解决方案 这个问题是自增列引起的 可能迁移或还原数据表结构时出现异常 解决的办法是重置标识
  • 算法-分治算法

    文章目录 分治算法 什么是分治算法 分治算法的优点 分治算法的核心思想 分治算法的技巧 分治算法的边界 分治算法的常见题型及讲解 归并排序及逆序对问题 归并排序 逆序对问题 快速排序和第k小数 快速排序 第k小数 树的遍历 树的先序遍历 树
  • 高手需要具备的思维模型

    01 思维模型 决定了你的人生状态 电影 教父 中 有一句经典台词 花半秒钟看透本质的人 和花一辈子都看不清的人 注定拥有截然不同的命运 思维模型 决定了你的人生状态 2014年 张一鸣观察到移动互联网时代面临的问题 信息爆炸式增长的同时
  • MATLAB零基础入门(一)

    大家好 我是Henry 上一期的Python爬虫实践中 Henry导入了Matplotlib库进行了新冠疫情的每日新增的绘图 其实Matplotlib的原型是另一门应用非常广泛的语言 Matlab 最近Henry也学习了一些Matlab的绘
  • 【C/C++时间系列】通过gmtime()函数将时间戳转换成GMT时间

    GMT Greenwich Mean Time 格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时 也就是在格林尼治时 的时间 地球每天的自转是有些不规则的 而且正在缓慢减速 所以 格林尼治时间已经不再被作为标准时间使用 现在的标准时间
  • 记一次成功把Vue2后台项目改造成Vite2的踩坑经历

    文章目录 前言 一 项目背景 1 1 为什么要选择Vite 二 迁移前的准备 2 1 补全 vue后缀 2 2 移动public index html的位置 2 2 1 通过vite plugin html插件来修改页面标题 2 3 新建v
  • CCF计算机软件能力认证 C++ 权限查询

    问题描述 授权 authorization 是各类业务系统不可缺少的组成部分 系统用户通过授权机制获得系统中各个模块的操作权限 本题中的授权机制是这样设计的 每位用户具有若干角色 每种角色具有若干权限 例如 用户 david 具有 mana
  • Python Flask简介及安装

    Python Flask简介及安装 Flask 是一个 Python 实现的 Web 开发微框架 一 Flask 简介 Flask 诞生于2010年 是 Armin ronacher 人名 用 Python 语言基于 Werkzeug 工具
  • 嵌入式复习题(五)程序分析题

    1 定时器 假设定时器内部时钟为16MHz 1 完成下面的注释 2 可以定时的时间为 5 ms htim3 Instance TIM3 htim3 Init Prescaler 799 预分频系数为799 htim3 Init Counte
  • 【Network】计算机网络基础知识总结

    阅读目录 网络层次划分 OSI七层网络模型 IP地址 子网掩码及网络划分 ARP RARP协议 路由选择协议 TCP IP协议 UDP协议 DNS协议 NAT协议 DHCP协议 HTTP协议 一个举例 网络层次划分 为了使不同计算机厂家生产
  • 神经网络学说的主要观点,对神经网络的简单理解

    心理学中定位说和模块说的区别是 整体说和神经网络学说的区别是 模块说和神经网络学说的区别是 简单说下 希望对你有帮助 定位说认为 大脑的具体功能是对应具体的部位 模块说认为 大脑的具体功能是由多个部位形成的模块共同实现的 而不是具体到位置
  • 论文理解:Generating Diverse High-Fidelity Images with VQ-VAE-2

    深度生成模型都有什么问题 研究者将常见的生成模型分为两种 一种是基于似然的模型 包括 VAE 及其变体 基于流的模型 以及自回归 autoregressive 模型 另一种是隐式生成模型 如生成对抗网络 GAN 这些模型都会存在某些方面的缺
  • 例说数据结构&STL(九)——map

    1 白话map map是STL的一个关联容器 它提供一对一 其中第一个可以称为关键字 每个关键字只能在map中出现一次 第二个可能称为该关键字的值 的数据处理能力 由于这个特性 它完成有可能在我们处理一对一数据的时候 在编程上提供快速通道
  • 【Linux】进程信号及信号产生

    文章目录 一 生活层面的信号 二 进程信号 三 硬件中断 四 信号产生 五 Term Core 1 核心转储的意义 2 云服务器为什么关闭核心转储 3 core dump标志 六 总结 结束语 一 生活层面的信号 在学习进程信号前 我们不妨
  • list 返回json 时 结果出现“$ref“:“$.data[0]“

    1 传入list的对象必须不是创建的一个对象 因为创建一个对象即使复制不同 但是hashcode相同 到json是无法解析 例如 new CheckFavoriteSupplierDto 需要每个都要new新对象 写for循环外会出现 re
  • 【电压质量】提高隔离电源系统的电压质量(Simulink实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真1 2 2 仿真2 3 参考文献 4 Simulink实现 1 概述 为了提高隔
  • 几种数据库的jdbc驱动实现

    要实现自己的JDBC驱动 最重要的是实现以下几个接口 java sql Driver java sql Connection java sql Statement java sql ResultSet 这篇文章讲解了如何实现一个简单的jdb
  • FreeCAD sketcher草图模式下旋转部分绘制的图形

    有时候我们在草图绘制的时候需要画多个形状一样但是方向不一样的元素 一个一个绘制肯定不符合咱么计算机基本理论 复制 粘贴 但是理论上直接选中几个绘制好的元素 可以复制 克隆 镜像 但是无法直接旋转任意角度 我也为此苦恼了许久 难道一个大名鼎鼎
  • Python学习——作图plt.cm.Set()用法

    https blog csdn net qq 41938858 article details 87705470

随机推荐

  • 解决Springboot 'jmsMessagingTemplate' not loaded because Ancestor org.springframework.boot.autoconfig

    问题来源 SpringBoot集成Activemq 报错内容 Description Field jmsTemplate in com xihuanyuye Producer required a bean of type org spri
  • Android爬取网页JSON数据详细教程【新手向】

    这几天做一个Android获取Json的任务 发现Jsoup只能获取静态页面 无法获取动态页面的Json数据 有同学给我更正 Jsoup可以爬取动态页面 但必须要加请求头 data 以下为正确例子 String url 你的网页接口 Map
  • PAT题库代码(个人版本)~~持续更新,持续改进!

    引言 之前在网上看到浙江大学的题目系统PAT 想要刷一刷玩 目前是乙级题库 题目不多 持续更新 努力 话不多说 上代码 题目以及运行效果这里就不给出了 与PAT网站上的相同 1002 写出这个数 include
  • CMOS到触发器(一)

    1 MOS晶体管结构与工作原理简述 我们或多或少知道 晶体管在数字电路中的主要作用就是一个电子开关 通过电压或者电流 控制这个 开关 开还是关 晶体管大概有两种分类 一种是双极性晶体管 BJT bipolar junction transi
  • AJAX模拟Form表单上传

    当前端上传图片的时候 需要传递给后端的是一个file对象 而不是一个路径 而files就是包含了图片的所有设置 包括大小 类型 内容等等 var xxx this container find xxx 0 files 将jquery转换成d
  • IDEA主菜单栏不小心按消失了的解决方法

    如图所示 这两行的消失解决方法如下 第一行 在代码区按两下shift键 出现搜索栏 在搜索栏里输入view 如下 这里没有找到Main Menu 点击左下方的很小的more 显示如下 找到Main Menu 点击使其变为ON即可 第二行 点
  • 【C++】map/multimap容器

    1 map基本概念 2 map构造和赋值 include
  • numpy如何将数组元素全部输出,不折叠展示!

    在print之前添加 np set printoptions threshold np inf 将数组的元素全部打印出来 添加前 添加后
  • 本网站服务器。。。。。。。。这句话是什么意思呢?

    网站一般是建立在服务器中 服务器一般是由中央机房管理 所以中央机房在哪个国家地区 一般是由当地的政府进行管理 其他的地方暂时无法管理 今天我们在分享一些写真壁纸 更多写真壁纸 可以关注公众号 优星馆
  • python导入模块的变量,使用python中的变量导入模块

    本问题已经有最佳答案 请猛点这里访问 我有一个即时导入模块的脚本 由于模块名称会在新版本出现时立即更改 因此很难检查脚本中的特定模块名称是否也发生了更改 因此 我将模块名保存在脚本顶部的变量中 如本例中所示 var1 moduleName1
  • 我接手前同事写的烂Java代码,不小心搞出了一个内存泄露事故

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 String 字符串在内存里是如何存储的 String intern 方法 String 字符串是如何引发内存泄漏呢 总结 今天给大家聊聊咱们平时写代码的时候
  • 【python】12.比较运算符与逻辑运算符

    比较运算符 运算符 描述 示例 判断相等 如果两个操作数的结果相等 则条件结果为真 True 否则条件结果为假 False a 3 b 3 则 a b 为True 不相等 如果两个操作数的结果不相等 则条件结果为真 True 否则条件结果为
  • Springbot启动报错-类文件具有错误的版本 61.0, 应为 52.0

    这是由于Spring6以及SprinBoot3 0开始最低支持JDK17 所以如果springboot版本设置过高 而jdk过低的话 就会报该错误 可以降低springboot或是提高jdk版本 降低springboot方式如下 打开pom
  • 【xshell】xshell 自动换行设置

    1 概述 linux连接终端使用从putty切换到xshell时 发现xshell中在显示长文本时不会自动换行 甚是郁闷 查看官方文档 解决方法为启用xshell中VT模式下的Auto Wrap Mode 搞定 如下图 初始VT模式 Aut
  • RTThread中falut定位方法

    RTThread中fault定位方法 在 RTThread中HardFault Handler分析 一文中已经分析了RTThread中对于fault中断的处理方法 接下来讲解如何根据错误输出信息对程序出现fault的位置进行定位 rtthr
  • Python基础(list列表的扩展方式和dict的用法)

    一 list列表扩展的方式有几种 或者说添加元素的方法 1 append 将对象追加到列表中最后一个元素的末尾 2 extend 通过从可选对象追加元素来扩展列表 3 insert 在索引前插入对象 以此来扩展列表 二 对 cherry l
  • 车与羊的选择

    电影 决胜21点 开始部分 课堂上教授问了这样一个问题 假设你正在参加一个电视游戏节目 被要求在三扇门中选择一扇 其中一扇后面有一辆车 其余两扇后面则是羊 你选择了一扇门 假设是1号门 这时候不知什么原因 主持人 他知道各个门后面都有什么
  • Typec协议之PD通信消息详解一

    Messages 消息由消息头和可变长度 包括零 数据部分组成 消息 头 数据 格式如下图 1 只包含头消息 其它为PHY Layer 2 包含消息头和数据消息 3 包含消息头和数据消息 和扩展的消息 Message Header 从表中可
  • 学习笔记--Verilog HDL高级数字设计--第六章组合逻辑与时序逻辑的综合

    组合逻辑与时序逻辑的综合 综合引擎能够自动完成一组布尔函数的最简化 并将结果映射成能满足设计目标的硬件实现 转换 优化 映射 本章将介绍如何编写易于综合的Verilog模型 综合工具完成的工作 1 检测并消除冗余项 2 查找组合反馈环路 3
  • 模糊c均值聚类_模式识别:K均值算法&模糊c均值算法的应用

    1 背景介绍 在实际应用场景中我们会遇见很多无监督分类的任务 样本不具有类别标注 我们无法通过有监督学习设计分类器 基于样本间相似性度量的聚类方法是无监督学习的重要组成部分 一般来说 聚类准则是根据样本之间的距离或相似程度来定义的 通常将相