Python学习笔记——cmeans模糊聚类例程

news/2024/5/20 9:42:07 标签: 聚类, python, 学习

文章目录

    • 模糊聚类应用简介
      • 安装环境
      • demo:
      • 运行结果

模糊聚类应用简介

模糊聚类即通过模糊数学(处理模糊或不确定性信息的数学方法)的相关算法进行聚类分析任务。
常用的模糊聚类算法包括模糊C均值聚类(FCM,Fuzzy-c means)、模糊谱聚类(FSC)、模糊层次聚类(FHC)等。这些算法都是基于模糊理论的,可以处理数据集中存在的噪声和不确定性。
其中,cmeans是最常用的一种算法,它可以将数据集划分为多个模糊的类别,并且可以自适应地调整聚类中心(center)的位置。
对于聚类而言,cmeans和kmeans都是聚类算法,都是通过将数据点分组来实现的。但是它们的实现方式略有不同,cmeans是基于模糊聚类的算法,而kmeans是基于硬聚类的算法;它们的适用场景也不同,cmeans适用于模糊聚类,即将数据点分配到多个簇中,每个数据点都有一定的隶属度,而kmeans适用于硬聚类,即将数据点分配到唯一的簇中。因此,哪种方法聚类效果更好取决于数据的特点和聚类的目的。

模糊聚类所用到的模糊数学基本原理包括模糊集、隶属函数、模糊集的运算等知识…

安装环境

需要用到Python的skfuzzy库,安装scikit-fuzzy包:pip install scikit-fuzzy
在这里插入图片描述

demo:

python">from sklearn.datasets._samples_generator import make_blobs
from skfuzzy.cluster import cmeans
import matplotlib.pylab as plt
import numpy as np

centers = [(-21, 49), (0, 30), (15, -12), (-15, 20)]
data, cluster_location = make_blobs(n_samples=600, centers=centers, n_features=4,\
                                    shuffle=True, cluster_std=[0.9, 0.7, 0.5, 0.1], random_state=14)
#定义颜色变量
color = ['c', 'b', 'g', 'r', 'm', 'y', 'k', 'w']
plt.scatter(data[:, 0], data[:, 1], c=color[3], edgecolors='y')
plt.show()

# 参数设置为4,聚类分为4类
center, u, u0, d, jm, p, fpc = cmeans(data.T, m=2, c=4, error=0.0001, maxiter=1000)
for i in u:
    label = np.argmax(u, axis=0)
print('聚类为4类的center值:')
print(center)
print('聚类为4类的fpc值', fpc)

plt.scatter(data[:, 0], data[:, 1], c=color[3], edgecolors='y')
plt.scatter(center[:, 0], center[:, 1], marker='x', c=color[1], s=200)
plt.show()

# 参数设置为 c=6,聚类为6类
center, u, u0, d, jm, p, fpc = cmeans(data.T, m=2, c=6, error=0.0001, maxiter=1000)
for i in u:
    label = np.argmax(u, axis=0)
print('--'*25)
print('聚类为6类的center值:')
print(center)
print('聚类为6类的fpc值', fpc)
plt.scatter(data[:, 0], data[:, 1], c=color[3], edgecolors='y')
plt.scatter(center[:, 0], center[:, 1], marker='x', c=color[1], s=200)
plt.show()

运行结果

定义四类数据,其分布情况的散点图如下图所示:
在这里插入图片描述
通过模糊聚类cmeans算法找到4类数据的中心点:
在这里插入图片描述
再通过模糊聚类cmeans算法从4类数据中细分出6类数据的中心点:
在这里插入图片描述
分类中心点结果:

聚类为4类的center值:
[[ 1.49241067e+01 -1.19688065e+01]
 [ 4.64417094e-03  2.99248955e+01]
 [-1.49986595e+01  2.00066981e+01]
 [-2.11604602e+01  4.88395374e+01]]
聚类为4类的fpc值 0.9950676425117277
--------------------------------------------------
聚类为6类的center值:
[[  0.51441871  30.07891282]
 [-20.6185994   49.2201012 ]
 [-14.99878117  20.00636212]
 [-21.72200718  48.42167217]
 [ -0.56549085  29.75447536]
 [ 14.92414469 -11.96887098]]
聚类为6类的fpc值 0.8431144121149842

fpc值越高,分类效果越好。

参考文献:
[1] 周洋 张小霞《机器学习数学基础》


http://www.niftyadmin.cn/n/345175.html

相关文章

【C生万物】 字符串内存函数篇 (上)

欢迎来到 Claffic 的博客 💞💞💞 👉 专栏:《C生万物 | 先来学C》👈 前言: 过了指针这个坎后,下一步就是C语言中关于字符的处理,这一期来讲…

无穷带来的直觉不靠谱

一、背景 话不多说直接上道具;错了…直接上问题。 请用直觉和数学逻辑告诉我下面三个问题的答案? S11-11-11-11-1… 问:S1等于多少? S21-23-45-67… 问:S2等于多少? S31234567… 问:S3等于多…

vscode远程到服务器(包括WSL)进行GDB调试

工欲善其事必先利其器,这句话不容小觑,调试工具做的好,对开发工作可起到事半功倍。 本文主要讲vscode远程到服务器进行在线GDB调试手段,包含对WSL的远程调试,可以轻松对照源码进行应用程序调试。 文章目录 一、vscode…

C语言学习分享(第八次)------初阶指针

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 初阶指针 1. 前言🚩2. …

Redis的主从复制,哨兵及群集

一、主从复制 1、主从复制-哨兵-集群 主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自…

Linux——线程6

POSIX信号量 POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于 线程间同步。 初始化信号量 #include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); 参数: pshared:0表示线程间共享…

软考 软件设计师上午题设计模式概念类

设计模式分类 创建型设计模式 简单工厂模式 不符合开闭原则&#xff0c;因此没有列入23类模式里 对扩展开放对修改关闭 工厂方法模式 说穿了&#xff1a;系统开放一个接口&#xff08;拓展开放&#xff09;、不提供修改的接口&#xff08;修改关闭&#xff09;&#xff0c;…

iOS正确获取图片参数深入探究及CGImageRef的使用(附源码)

一 图片参数的正确获取 先拿一张图片作为测试使用 图片参数如下&#xff1a; 图片的尺寸为&#xff1a; -宽1236个像素点 -高748个像素点 -色彩空间为RGB -描述文件为彩色LCD -带有Alpha通道 请记住这几个参数&#xff0c;待会儿我们演示如何正确获取。 将这张图片分别放在…