【机器学习笔记37】模糊聚类分析(基于最大生成树)
【参考资料】
【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.500.70.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 基于模糊矩阵的等价关系
如果模糊矩阵满足等价关系的三个要素,即:
- 自反性:rij=1r_{ij} = 1rij=1
- 对称性:rij=rjir_{ij} = r_{ji}rij=rji
- 传递性: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}⎣⎢⎢⎡x11x21⋯xn1x12x22⋯xn2⋯⋯⋯⋯x1mx2m⋯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,M1k=1∑mxik.xjk,i=ji̸=j
这里M=max(∑k=1mxik.xjk)M = max(\sum\limits_{k=1}^{m}x_{ik}.x_{jk})M=max(k=1∑mxik.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】模糊聚类分析(基于最大生成树)相关推荐
- 机器学习笔记之玻尔兹曼机(三)基于平均场理论变分推断的梯度求解(续)
机器学习笔记之玻尔兹曼机--基于平均场推断梯度求解[续] 引言 Λ 3 \Lambda_3 Λ3梯度求解 求解最优参数 ϕ ^ j \hat {\phi}_j ϕ^j 引言 基于玻尔兹曼机(三) ...
- 机器学习笔记之狄利克雷过程(五)——基于狄利克雷过程的预测任务
机器学习笔记之狄利克雷过程--基于狄利克雷过程的预测任务 引言 回顾:从概率图角度观察狄利克雷过程 关于随机测度 G \mathcal G G的后验概率分布 从指数族分布角度观察后验分布的性质 关于 ...
- 机器学习笔记之概率图模型(四)基于贝叶斯网络的模型概述
机器学习笔记之概率图模型--基于贝叶斯网络的模型概述 引言 基于贝叶斯网络的模型 场景构建 朴素贝叶斯分类器 混合模型 基于时间变化的模型 特征是连续型随机变量的贝叶斯网络 动态概率图模型 总结 引言 ...
- 机器学习之变分推断(三)基于平均场假设变分推断与广义EM
机器学习笔记之变分推断--基于平均场假设变分推断与广义EM 引言 回顾:基于平均场假设的变分推断 深入认识平均场假设 经典变分推断与广义EM 引言 上一节介绍了基于平均场假设 的变分推断推导过程.本节 ...
- 最小错误率贝叶斯决策的基本思想_机器学习笔记—模式识别与智能计算(四)基于概率统计的贝叶斯分类器设计(贝叶斯决策)...
系列文章: 机器学习笔记-模式识别与智能计算(一)模式识别概述 机器学习笔记-模式识别与智能计算(二)特征的选择与优化 机器学习笔记-模式识别与智能计算(三)模式相似性测度 同类文章: 机器学习笔记- ...
- matlab聚类分析实例的博客,基于Matlab的模糊聚类分析及其应用 含实例应用.pptx
基于Matlab的模糊聚类分析及其应用 含实例应用 1;;3;1.预备知识;定义一:(模糊)聚类分析 在科学技术,经济管理中常常需要按一定的标准(相似程度或亲疏关系)进行分类.对所研究的事物按一定标准 ...
- 基于模糊等价关系的模糊聚类分析
基于模糊等价关系的模糊聚类分析 http://blog.csdn.net/laviewpbt/article/details/1361460 假设R是X上的模糊等价关系,则对任意的a,R的a-截集是X ...
- 机器学习笔记之玻尔兹曼机(三)梯度求解(基于平均场理论的变分推断)
机器学习笔记之玻尔兹曼机--基于平均场推断梯度求解 引言 回顾:玻尔兹曼机模型参数梯度求解困难与MCMC方法的处理方式 变分推断方法处理玻尔兹曼机对数似然梯度 引言 上一节介绍了使用马尔可夫链蒙特卡洛 ...
- 机器学习笔记1:基于Logistic回归进行数据预测
机器学习笔记1:基于Logistic回归进行数据预测 一.背景 近期项目的一个核心部分就是实现对数据的预测,因为没有实际的数据样本,所以我准备近期学习Machine Learning的几种方式,从简单 ...
最新文章
- 了解C++默默编写并调用哪些函数
- 苹果新算法已混进 iOS 14.3!CSAM 检测技术再遭网友争议
- osgEarth3.0 加载天地图
- FPGA设计心得(13)aurora的线速率及其用户时钟之间的关系?
- Activity Stack
- 797C C. Minimal string
- node_modules
- 【Android视图效果】共享元素实现仿微信查看大图效果
- C# ASP.NET程序员整合Java门户单点登录PHPwind论坛博客软件集成项目经验总结
- 【2D动画】《想你》。。。。难以想象
- 正确使用stl map的erase方法
- 二项式定理的几何视觉演示再次来袭,这次你看懂了吗?
- 数字图像识别笔记(第三章-灰度变换与空间滤波)
- ospf多区域实例配置
- android安卓 通知notification
- 高速计算机的应用领域概括,河北计算机一级考试题-MS模拟试题
- 常见驱动程序相关知识
- ADI交替差分隐格式求解二维热传导方程
- 程序员投入时间和精力实现财富增长之道,这可能会伴随你程序员整个生涯(请不要连续点赞)
- 【历史上的今天】3 月 4 日:美团网正式上线;Dropbox 的创始人出生;PS2 游戏机问世
热门文章
- 前端项目中常用的轮子,提升开发效率
- python爬取图片链接标签的src属性值_python爬取图片遇见src乱码: data:image/png;base64...
- 知道了这32个网站,你就成了别人眼中的大神!!
- fio -enghelp中没有rbd、rados引擎解决方法
- 县域面板数据(2000-2019)一:国民经济核算+人口(面板数据,stata或excel版)
- java epson_打印 – 如何使用JavaPOS使用Epson打印机打印接收?
- 面试项目2:基于Spark2.x的电商大数据统计分析平台
- Java自学基础 常用类
- 生产者消费者问题实践
- 【Nginx 流量控制】控制一秒处理多少请求