matlab练习程序(马尔可夫聚类MCL)
本文主要参考:
https://wenku.baidu.com/view/b7907665caaedd3383c4d31b.html
https://blog.csdn.net/u010376788/article/details/50187321
虽然参考上面两篇文章,不过这里和他给出的算法步骤不完全一致。
因为上面文章是针对Graphs的,矩阵中有边为0的数据,而我的数据是Vector的,边是根据距离计算出来的,应该还是有点区别的,而且我还用了kmeans。
首先给出他的算法步骤:
1.输入一个无向图,Expansion的幂e和Inflation的参数r。
2.创建邻接矩阵。
3.对每个结点添加自循环(可选的)。
4.标准化矩阵(每个元素除以所在列的所有元素之和)。
5.计算矩阵的第e次幂。
6.用参数r对求得的矩阵进行Inflation处理。
7.重复第5步和第6步,直到状态稳定不变(收敛)。
8.把最终结果矩阵转换成聚簇。
然后是这里的算法步骤:
1.输入数据,创建邻接矩阵。
2.标准化矩阵(每个元素除以所在列的所有元素之和)。
3.对标准化后的矩阵进行马尔可夫状态转移。
4.重复第2步和第3步,直到状态稳定不变(收敛)。
5.使用kmeans把最终结果矩阵转换成聚簇。(不明白kmeans的可以看看这篇文章)
代码如下:
clear all;
close all;
clc; K=;
theta=:0.01:*pi;
p1=[*cos(theta) + rand(,length(theta))/;*sin(theta)+ rand(,length(theta))/];
p2=[*cos(theta) + rand(,length(theta))/;*sin(theta)+ rand(,length(theta))/];
p3=[cos(theta) + rand(,length(theta))/;sin(theta)+ rand(,length(theta))/];
p=[p1 p2 p3]'; randIndex = randperm(length(p))'; %打乱数据顺序
p=p(randIndex,:);
plot(p(:,),p(:,),'.') for i = :length(p)
for j =:length(p)
W(i,j) = sqrt(sum((p(i,:)-p(j,:)).^)); %根据距离初始化无向图的边
end
end preW=W;
while
x=repmat(sum(W),length(p),);
W=W./x;
W=W*W; %马尔科夫状态转移 if sum(sum(preW-W))<1e-15
break;
end preW=W;
end [idx,ctrs] = kmeans(W(:,),K); %用kmeans将收敛矩阵转换为聚簇
figure;
plot(p(idx==,),p(idx==,),'r.')
hold on;
plot(p(idx==,),p(idx==,),'g.')
plot(p(idx==,),p(idx==,),'b.')
原始数据:

聚类后:

matlab练习程序(马尔可夫聚类MCL)的更多相关文章
- 马尔科夫随机场(MRF)及其在图像降噪中的matlab实现
(Markov Random Field)马尔科夫随机场,本质上是一种概率无向图模型 下面从概率图模型说起,主要参考PR&ML 第八章 Graphical Model (图模型) 定义:A g ...
- 从随机过程到马尔科夫链蒙特卡洛方法(MCMC)
从随机过程到马尔科夫链蒙特卡洛方法 1. Introduction 第一次接触到 Markov Chain Monte Carlo (MCMC) 是在 theano 的 deep learning t ...
- [综]隐马尔可夫模型Hidden Markov Model (HMM)
http://www.zhihu.com/question/20962240 Yang Eninala杜克大学 生物化学博士 线性代数 收录于 编辑推荐 •2216 人赞同 ×××××11月22日已更 ...
- 机器学习&数据挖掘笔记_19(PGM练习三:马尔科夫网络在OCR上的简单应用)
前言: 接着coursera课程:Probabilistic Graphical Models上的实验3,本次实验是利用马尔科夫网络(CRF模型)来完成单词的OCR识别,每个单词由多个字母组合,每个字 ...
- 隐马尔科夫模型(Hidden Markov Models)
链接汇总 http://www.csie.ntnu.edu.tw/~u91029/HiddenMarkovModel.html 演算法笔记 http://read.pudn.com/downloads ...
- Python实现HMM(隐马尔可夫模型)
1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别.文本翻译.序列预测.中文分词等多个领域.虽然近年来,由于RNN等深度学习方法的发展,HMM模型逐 ...
- 马尔可夫随机场(Markov random fields) 概率无向图模型 马尔科夫网(Markov network)
上面两篇博客,解释了概率有向图(贝叶斯网),和用其解释条件独立.本篇将研究马尔可夫随机场(Markov random fields),也叫无向图模型,或称为马尔科夫网(Markov network) ...
- 隐马尔可夫(HMM)/感知机/条件随机场(CRF)----词性标注
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 7. 词性标注 7.1 词性标注概述 什么是词性 在语言学上,词性(Par-Of- ...
- HMM基本原理及其实现(隐马尔科夫模型)
HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...
随机推荐
- docker镜像打包save,载入load,启动run
docker打包,针对的是镜像,而不是运行中的容器. 查看当前系统的镜像文件:docker images 将当前运行中的,已经自定义修改后的容器保存为新的镜像. docker commit ce11e ...
- springBoot(4)---热部署,配置文件使用
热部署,配置文件使用 一.热加载 spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Sprin ...
- Android--多线程之图文混排
前言 本周一直在说Android多线程的那些事儿,本篇博客聊一聊Android开发中一个比较经典的案例,网络数据图文混排,本片博客的案例只涉及关于开启多线程访问网络数据,不涉及缓存的内容.众所周知,从 ...
- 函数式编程之-Partial application
上一篇关于Currying的介绍,我们提到F#是如何做Currying变换的: let addWithThreeParameters x y z = x + y + z let intermediat ...
- Java基础系列--包装类
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5462489.html 1.8种基本数据类型都有各自的包装类,其对应关系为: 基本—————— ...
- Android View 的事件分发原理解析
作为一名 Android 开发者,每天接触最多的就是 View 了.Android View 虽然不是四大组件,但其并不比四大组件的地位低.而 View 的核心知识点事件分发机制则是不少刚入门同学的拦 ...
- Python图像处理之图片文字识别(OCR)
OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同 ...
- AngularJs_自定义注入对象_笔记1
A-自定义控件示例: 我的自定义控件文件为:angular-seagull2-common.js (function (window, angular) { 'use strict'; $urlPro ...
- 多个微信小程序一个服务端架构
由于某些特定的业务场景,当多个小程序需要一个服务端后台提供数据时,大家可能想到是HTTP路由.是的,实际上我们使用微服务的GateWay网关也是一样的,如下图微服务架构: 网关GateWay的作用在于 ...
- [PHP] 算法-选择排序的PHP实现
选择排序: 1.数组分成前后两个部分,前部分是排序的,后部分是无序的 2.两层循环,先假定当前循环的第一个索引为最小值,内部循环找比该索引还小的值,找到交换 for i;i<len;i++ mi ...