文章目录
- 模糊聚类应用简介
- 安装环境
- 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:
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] 周洋 张小霞《机器学习数学基础》