文章目录

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


模糊聚类应用简介

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

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

安装环境

需要用到Python的skfuzzy库,安装scikit-fuzzy包:pip install scikit-fuzzy

python 模糊逻辑分类 python 模糊聚类_聚类

demo:

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()

运行结果

定义四类数据,其分布情况的散点图如下图所示:

python 模糊逻辑分类 python 模糊聚类_python_02


通过模糊聚类cmeans算法找到4类数据的中心点:

python 模糊逻辑分类 python 模糊聚类_学习_03


再通过模糊聚类cmeans算法从4类数据中细分出6类数据的中心点:

python 模糊逻辑分类 python 模糊聚类_python_04


分类中心点结果:

聚类为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] 周洋 张小霞《机器学习数学基础》