【参考资料】
【1】《模式识别与智能计算的MATLAB技术实现》
【2】《模糊数学方法及其应用》
【3】https://baike.baidu.com/item/Kruskal/10242089?fr=aladdin

1. 模糊关系的矩阵定义

模糊集定义及基础信息,参考之前笔记《模糊数学笔记-模糊集》

1.1 模糊关系

定义: 设论域U,V,称U×VU \times VU×V的一个模糊子集R∼∈F(U×V)\underset{\sim}{R} \in F(U \times V)∼R​∈F(U×V)为U到V的模糊关系。其隶属函数映射为:
UR:U×V→[0,1]U_R: U \times V \to [0, 1]UR​:U×V→[0,1] 其隶属度R∼(x,y)\underset{\sim}{R}(x,y)∼R​(x,y)称为(x,y)关于模糊关系R∼\underset{\sim}{R}∼R​的相关程度。

举例:

1.2 模糊矩阵

我们可以将上述关系用模糊矩阵来表述,有点类似马儿可夫随机过程里定义状态转移矩阵

定义矩阵R=(rij)m×nR=(r_{ij})_{m \times n}R=(rij​)m×n​为模糊矩阵,例如:
[100.10.50.70.3]\begin{bmatrix} 1 & 0 & 0.1 \\ 0.5 & 0.7 & 0.3 \end{bmatrix}[10.5​00.7​0.10.3​],这里rij∈[0,1]r_{ij} \in [0, 1]rij​∈[0,1]

这里比较主要的是模糊矩阵的合成运算,如下:

定义:设A=(aij)m×tA=(a_{ij})_{m \times t}A=(aij​)m×t​,B=(bij)t×nB=(b_{ij})_{t \times n}B=(bij​)t×n​称模糊矩阵A∘B=(cij)m×nA \circ B = (c_{ij})_{m \times n}A∘B=(cij​)m×n​

其中$ (c_{ij}) = {\lor}{t = 1}^s(a{it} \land b_{tj}) $

这里和矩阵乘法类似,只是在具体的运算中原先的元素乘元素编程取最小值,原先的乘积相加变为求最大值。 举例:

其次我们定义模糊矩阵的λ\lambdaλ截距矩阵,这个定义比较简单,矩阵中的每个元素大于λ\lambdaλ则为1,否则为0。举例如下:

2. 模糊关系的聚类分析

2.1 基于模糊矩阵的等价关系

如果模糊矩阵满足等价关系的三个要素,即:

  1. 自反性:rij=1r_{ij} = 1rij​=1
  2. 对称性:rij=rjir_{ij} = r_{ji}rij​=rji​
  3. 传递性:R∘R≤RR \circ R \le RR∘R≤R(rij)≥∨t=1s(rit∧rtj)(r_{ij}) \ge {\lor}_{t = 1}^s(r_{it} \land r_{tj})(rij​)≥∨t=1s​(rit​∧rtj​)

这里有一点不理解,为什么传递性中是小于等于而非直接等于?

举例:

2.2 基于模糊矩阵的分类

由于等价关系代表着集合上的一个分类,因此在模糊聚类中,我们对模糊矩阵取不同的λ\lambdaλ截距,就可以取不同的分类。

3. 模糊聚类的算法步骤

第一步建立原始数据矩阵:

存在n个被分类对象,每个对象存在m个属性,则有:
[x11x12⋯x1mx21x22⋯x2m⋯⋯⋯⋯xn1xn2⋯xnm]\begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1m}\\ x_{21} & x_{22} & \cdots & x_{2m}\\ \cdots & \cdots & \cdots & \cdots\\ x_{n1} & x_{n2} & \cdots & x_{nm} \end{bmatrix}⎣⎢⎢⎡​x11​x21​⋯xn1​​x12​x22​⋯xn2​​⋯⋯⋯⋯​x1m​x2m​⋯xnm​​⎦⎥⎥⎤​,同时将数据归一化到[0,1]之间。

第二步建立模糊相似矩阵:

对第一步建立的数据矩阵,其元素xix_ixi​和xjx_jxj​建立一个相似矩阵。其中每一个元素rijr_{ij}rij​代表xix_ixi​和xjx_jxj​。这里的相似度可以用多种方式做,比如数量积、相关系数等。

比如数量积定义:
rij={1,i=j1M∑k=1mxik.xjk,i≠jr_{ij}= \begin{cases} 1, & i = j \\ \dfrac{1}{M} \sum\limits_{k=1}^{m}x_{ik}.x_{jk}, & i \ne j \end{cases}rij​=⎩⎨⎧​1,M1​k=1∑m​xik​.xjk​,​i=ji̸​=j​
这里M=max(∑k=1mxik.xjk)M = max(\sum\limits_{k=1}^{m}x_{ik}.x_{jk})M=max(k=1∑m​xik​.xjk​)

这里的结果也归一化到[0,1]之间

第三步聚类操作:

这里举例为最大树法。

这里用的就是最大生成树Kruskal算法

4. 程序实现

# -*- coding: utf-8 -*-
import numpy  as np
import sklearn.datasets as ds
import matplotlib.pyplot as plt
import random
import math
import operatorSAMPLE_NUM  = 200    #样本数量
FEATURE_NUM = 2     #每个样本的特征数量
CLASS_NUM   = 2     #分类数量#1. 初始化测试数据
sample, y = ds.make_blobs(SAMPLE_NUM, n_features=FEATURE_NUM, centers=CLASS_NUM, random_state=3)sim_array = [[0 for col in range(SAMPLE_NUM)] for row in range(SAMPLE_NUM)]tree_node  = []   #选择的节点
path_node  = []   #路径
value_node = []   #存储路径对应的值def _build_kruskal_tree():#kruskal每次筛选与当前已选区域联通的点,将满足要求最好的点加入已选区域tree_node.append(0)while len(tree_node) < SAMPLE_NUM :tmp_sum = 0tmp_set = (0,0)tmp_node = 0for node in tree_node:for i in range(0, SAMPLE_NUM):if node == i:continueelse:if i in tree_node:continueelse:#计算距离if sim_array[node][i] > tmp_sum:tmp_sum = sim_array[node][i]tmp_set = (node, i)tmp_node = ipath_node.append(tmp_set)tree_node.append(tmp_node)value_node.append((len(path_node), tmp_sum))def _do_fuzzy_cluster():#2. 构造相似矩阵max = 0for i in range(0, SAMPLE_NUM):for j in range(0, SAMPLE_NUM):if i == j:sim_array[i][j] = 1else:tmp = 0for k in range(0, FEATURE_NUM):tmp += sample[i][k] * sample[j][k]sim_array[i][j] = tmpif tmp > max:max = tmpfor i in range(0, SAMPLE_NUM):for j in range(0, SAMPLE_NUM):if i != j:sim_array[i][j] = sim_array[i][j]/max#3. 构造最大树_build_kruskal_tree()#4. 聚类划分并显示#根据最大生成树来进行分类value_node.sort(key= operator.itemgetter(1))gamma = value_node[int(len(value_node)/2)][1]#根据这个gamma值分开y_pre = [0 for col in range(SAMPLE_NUM)]for i in range(0, SAMPLE_NUM - 1):start = path_node[i][0]end   = path_node[i][1]if value_node[i][1] > gamma:y_pre[start] = 1y_pre[end]   = 1else:y_pre[start] = 0y_pre[end]   = 0#print(np.array(y_pre))#print(y)#显示plt.figure(figsize=(5, 6), facecolor='w')plt.subplot(211)plt.title('origin classfication')plt.scatter(sample[:, 0], sample[:, 1], c=y, s=20, edgecolors='none')plt.subplot(212)plt.title('fuzzy classfication')plt.scatter(sample[:, 0], sample[:, 1], c=np.array(y_pre), s=20, edgecolors='none')plt.show()"""
说明:模糊聚类的代码实现,基于最大树算法,针对笔记《模糊聚类分析》作者:fredric日期:2018-12-23"""
if __name__ == "__main__":_do_fuzzy_cluster()

【机器学习笔记37】模糊聚类分析(基于最大生成树)相关推荐

  1. 机器学习笔记之玻尔兹曼机(三)基于平均场理论变分推断的梯度求解(续)

    机器学习笔记之玻尔兹曼机--基于平均场推断梯度求解[续] 引言 Λ 3 \Lambda_3 Λ3​梯度求解 求解最优参数 ϕ ^ j \hat {\phi}_j ϕ^​j​ 引言 基于玻尔兹曼机(三) ...

  2. 机器学习笔记之狄利克雷过程(五)——基于狄利克雷过程的预测任务

    机器学习笔记之狄利克雷过程--基于狄利克雷过程的预测任务 引言 回顾:从概率图角度观察狄利克雷过程 关于随机测度 G \mathcal G G的后验概率分布 从指数族分布角度观察后验分布的性质 关于 ...

  3. 机器学习笔记之概率图模型(四)基于贝叶斯网络的模型概述

    机器学习笔记之概率图模型--基于贝叶斯网络的模型概述 引言 基于贝叶斯网络的模型 场景构建 朴素贝叶斯分类器 混合模型 基于时间变化的模型 特征是连续型随机变量的贝叶斯网络 动态概率图模型 总结 引言 ...

  4. 机器学习之变分推断(三)基于平均场假设变分推断与广义EM

    机器学习笔记之变分推断--基于平均场假设变分推断与广义EM 引言 回顾:基于平均场假设的变分推断 深入认识平均场假设 经典变分推断与广义EM 引言 上一节介绍了基于平均场假设 的变分推断推导过程.本节 ...

  5. 最小错误率贝叶斯决策的基本思想_机器学习笔记—模式识别与智能计算(四)基于概率统计的贝叶斯分类器设计(贝叶斯决策)...

    系列文章: 机器学习笔记-模式识别与智能计算(一)模式识别概述 机器学习笔记-模式识别与智能计算(二)特征的选择与优化 机器学习笔记-模式识别与智能计算(三)模式相似性测度 同类文章: 机器学习笔记- ...

  6. matlab聚类分析实例的博客,基于Matlab的模糊聚类分析及其应用 含实例应用.pptx

    基于Matlab的模糊聚类分析及其应用 含实例应用 1;;3;1.预备知识;定义一:(模糊)聚类分析 在科学技术,经济管理中常常需要按一定的标准(相似程度或亲疏关系)进行分类.对所研究的事物按一定标准 ...

  7. 基于模糊等价关系的模糊聚类分析

    基于模糊等价关系的模糊聚类分析 http://blog.csdn.net/laviewpbt/article/details/1361460 假设R是X上的模糊等价关系,则对任意的a,R的a-截集是X ...

  8. 机器学习笔记之玻尔兹曼机(三)梯度求解(基于平均场理论的变分推断)

    机器学习笔记之玻尔兹曼机--基于平均场推断梯度求解 引言 回顾:玻尔兹曼机模型参数梯度求解困难与MCMC方法的处理方式 变分推断方法处理玻尔兹曼机对数似然梯度 引言 上一节介绍了使用马尔可夫链蒙特卡洛 ...

  9. 机器学习笔记1:基于Logistic回归进行数据预测

    机器学习笔记1:基于Logistic回归进行数据预测 一.背景 近期项目的一个核心部分就是实现对数据的预测,因为没有实际的数据样本,所以我准备近期学习Machine Learning的几种方式,从简单 ...

最新文章

  1. 了解C++默默编写并调用哪些函数
  2. 苹果新算法已混进 iOS 14.3!CSAM 检测技术再遭网友争议
  3. osgEarth3.0 加载天地图
  4. FPGA设计心得(13)aurora的线速率及其用户时钟之间的关系?
  5. Activity Stack
  6. 797C C. Minimal string
  7. node_modules
  8. 【Android视图效果】共享元素实现仿微信查看大图效果
  9. C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结
  10. 【2D动画】《想你》。。。。难以想象
  11. 正确使用stl map的erase方法
  12. 二项式定理的几何视觉演示再次来袭,这次你看懂了吗?
  13. 数字图像识别笔记(第三章-灰度变换与空间滤波)
  14. ospf多区域实例配置
  15. android安卓 通知notification
  16. 高速计算机的应用领域概括,河北计算机一级考试题-MS模拟试题
  17. 常见驱动程序相关知识
  18. ADI交替差分隐格式求解二维热传导方程
  19. 程序员投入时间和精力实现财富增长之道,这可能会伴随你程序员整个生涯(请不要连续点赞)
  20. 【历史上的今天】3 月 4 日:美团网正式上线;Dropbox 的创始人出生;PS2 游戏机问世

热门文章

  1. 前端项目中常用的轮子,提升开发效率
  2. python爬取图片链接标签的src属性值_python爬取图片遇见src乱码: data:image/png;base64...
  3. 知道了这32个网站,你就成了别人眼中的大神!!
  4. fio -enghelp中没有rbd、rados引擎解决方法
  5. 县域面板数据(2000-2019)一:国民经济核算+人口(面板数据,stata或excel版)
  6. java epson_打印 – 如何使用JavaPOS使用Epson打印机打印接收?
  7. 面试项目2:基于Spark2.x的电商大数据统计分析平台
  8. Java自学基础 常用类
  9. 生产者消费者问题实践
  10. 【Nginx 流量控制】控制一秒处理多少请求