在统计和数据挖掘中,亲和传播(AP)是基于数据点之间"消息传递"概念的聚类算法。与诸如k-means或k-medoids的聚类算法不同,亲和传播不需要在运行算法之前确定或估计聚类的数量。 类似于k-medoids,亲和力传播算法发现"样本",输入集合的成员,输出聚类结果。

一 算法描述

2.1基本介绍

我们让(x1,…xn)作为一系列的数据点,然后用矩阵S代表各个数据点之间的相似度,一般相似度的判断有欧氏距离,马氏距离,汉明距离。如果S(i,k)>S(i,j)则表示i到k的距离比i到j的距离近。其中S(k,k)表示节点k作为k的聚类中心的合适程度,可以理解为,节点k成为聚类中心合适度,在最开始时,这个值是初始化的时候使用者给定的值,会影响到最后聚类的数量。

这个算法通过迭代两个消息传递步骤来进行,以更新下面两个矩阵:

代表(Responsibility)矩阵R:r(i,k)表示第k个样本适合作为第i个样本的类代表点的代表程度。说白了K为男人,i为女人,代表矩阵R表示,这个男人成为i这个女人老公的适合程度。

适选(Availabilities)矩阵A=[a(i,k)]N×N:a(i,k)表示第i个样本选择第k个样本作为类代表样本的适合程度,同理表示i选择K作为自己老公的可能性。当然,这个社会是相对于封建社会有点进步的,比如也会征求女方的意见,但是又有一定弊端,这个男人K可以三妻四妾。所以K这个聚类中心,周围可以有许多样本i。所以有的人叫R矩阵为吸引度矩阵,矩阵A为归属度矩阵也是不无道理的。

2.2 算法的迭代公式

对于代表矩阵r: 

假设现在有一个聚类中心K,我们找到另外一个假想的聚类中心k',重新定义K'的代表矩阵和适合矩阵:,找出这两个值相加最大的那一个,在用我们的减去这个最大的,就表示这个K的聚类中心对i这个样本的吸引程度。你想想,最大情敌的吸引力都没有我高,那我岂不是最牛叉???

对于适合矩阵a: 

我们要明白一个道理,如果一个男人对大部分女人的吸引力都很大,那么这个男人对你这个女人的吸引力的可能性是不是比别人大一点?明白了这个道理。同理如果节点k作为其他节点i'的聚类中心的合适度很大,那么节点k作为节点i的聚类中心的合适度也可能会较大,由此就可以先计算节点k对其他节点的吸引度,r(i',k),然后做一个累加和表示节点k对其他节点的吸引度,得到:。等等r(k,k)是什么意思呢,一般帅的人是不是都是特别容易自恋?你懂得,所以这个表示样本选择自己作为聚类中心的自恋程度。为了不让这个值过大,影响整体结果,将这个值控制在0以下。当i=k的时候我们选就可以了。a(k,k)表示K这个作为聚类中心的能力。

注意有时候为了防止参数更新时的震动需要引入一个减震参数damping。Damping计算如下:

二 算法实现

function idx = AP(S)

N = size(s,1);

A=zeros(N,N);

R=zeros(N,N); % Initialize messages

lam=0.9; % Set damping factor

same_time = -1;

for iter=1:10000

% Compute responsibilities

Rold=R;

AS=A+S;

[Y,I]=max(AS,[],2);

for i=1:N

AS(i,I(i))=-1000;

end

[Y2,I2]=max(AS,[],2);

R=S-repmat(Y,[1,N]);

for i=1:N

R(i,I(i))=S(i,I(i))-Y2(i);

end

R=(1-lam)*R+lam*Rold; % Dampen responsibilities

% Compute availabilities

Aold=A;

Rp=max(R,0);

for k=1:N

Rp(k,k)=R(k,k);

end

A=repmat(sum(Rp,1),[N,1])-Rp;

dA=diag(A);

A=min(A,0);

for k=1:N

A(k,k)=dA(k);

end;

A=(1-lam)*A+lam*Aold; % Dampen availabilities

if(same_time == -1)

E=R+A;

[tt idx_old] = max(E,[],2);

same_time = 0;

else

E=R+A;

[tt idx] = max(E,[],2);

if(sum(abs(idx_old-idx)) == 0)

same_time = same_time + 1;

if(same_time == 10)

iter

break;

end

end

idx_old = idx;

end

end

E=R+A;

[tt idx] = max(E,[],2);

% figure;

% for i=unique(idx)'

% ii=find(idx==i);

% h=plot(x(ii),y(ii),'o');

% hold on;

% col=rand(1,3);

% set(h,'Color',col,'MarkerFaceColor',col);

% xi1=x(i)*ones(size(ii)); xi2=y(i)*ones(size(ii));

% line([x(ii)',xi1]',[y(ii)',xi2]','Color',col);

% end;

总结:算法讲解部分到这里结束了。谢谢大家,能否走一波关注?哈哈

干货回顾丨机器学习笔记-----AP(affinity propagat)算法讲解及matlab实现相关推荐

  1. 吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection)

    吴恩达机器学习笔记55-异常检测算法的特征选择(Choosing What Features to Use of Anomaly Detection) 对于异常检测算法,使用特征是至关重要的,下面谈谈 ...

  2. Python机器学习笔记:异常点检测算法——Isolation Forest

    Python机器学习笔记:异常点检测算法--Isolation Forest 参考文章: (1)Python机器学习笔记:异常点检测算法--Isolation Forest (2)https://ww ...

  3. 科普丨机器学习翻译和谷歌翻译算法

    科普丨机器学习翻译和谷歌翻译算法 原2017.08.22人工智能爱好者俱乐部 作者:Daniil Korbut 机器翻译引擎的基本原理 谷歌机器翻译 Zero-shot:零次 Training:训练 ...

  4. 干货回顾丨深度学习性能提升的诀窍

    Pedro Ribeiro Simoes拍摄 原文: How To Improve Deep Learning Performance 作者: Jason Brownlee 你是如何提升深度学习模型的 ...

  5. matlab回归问题,机器学习笔记(一)—— 线性回归问题与Matlab求解

    给你多组数据集,例如给你很多房子的面积.房子距离市中心的距离.房子的价格,然后再给你一组面积. 距离,让你预测房价.这类问题称为回归问题. 回归问题(Regression) 是给定多个自变量.一个因变 ...

  6. matlab算法用python做_机器学习笔记—朴素贝叶斯算法实现(matlab/python)

    原理知道一百遍不如自己动手写一遍,当然,现在基本上不需要自己来写算法的底层code了,各路大神们已经为我等凡夫俗子写好了,直接调用就行. 这里介绍在MATLAB中和Python中应用贝叶斯算法的小例子 ...

  7. 干货回顾丨深度学习应用大盘点

      当首次介绍深度学习时,我们认为它是一个要比机器学习更好的分类器.或者,我们亦理解成大脑神经计算. 第一种理解大大低估了深度学习构建应用的种类,而后者又高估了它的能力,因而忽略了那些不是一般人工智能 ...

  8. 干货回顾丨TensorFlow四种Cross Entropy算法的实现和应用

    交叉熵介绍 交叉熵(Cross Entropy)是Loss函数的一种(也称为损失函数或代价函数),用于描述模型预测值与真实值的差距大小,常见的Loss函数就是均方平方差(Mean Squared Er ...

  9. 斯坦福CS229机器学习笔记-Lecture5 - 生成学习算法+高斯判别GDA+朴素贝叶斯+拉普拉斯平滑

    作者:teeyohuang 邮箱:teeyohuang@163.com 本文系原创,供交流学习使用,转载请注明出处,谢谢 声明:此系列博文根据斯坦福CS229课程,吴恩达主讲 所写,为本人自学笔记,写 ...

最新文章

  1. VMProtect 与 ASProtect 在VC中的SDK编程
  2. Python中函数的介绍以及用法
  3. python模拟登陆 验证码el_python 模拟登陆github的示例
  4. 安装串口设备驱动时遇到 Windows 无法验证此设备所需的驱动程序的数字签名。最近的硬件或软件更改安装的文件可能未正确签名或已损坏,或者可能是来自未知来源的恶意软件. 问题该如何处理?...
  5. sudo gem install cocoapods
  6. 增量式修改检验和(IP, TCP, UDP)算法的研究和实现
  7. 中国天气网 城市代号
  8. 文本分类数据和评价指标
  9. 卡西欧计算机在线使用方法,卡西欧金融计算器FC-200V使用教程
  10. Office 365绝技系列:3分钟完成PPT设计排版
  11. httpclient的两个重要的参数maxPerRoute及MaxTotal
  12. 引入时间轴:动态图模型的共性与特征
  13. 使用Office Tool Plus Beta版安装Office2021
  14. BP 神经网络的数据分类
  15. uniapp保存图片_uni-app处理图片乱码
  16. iOS基础UI瀑布流界面简单搭建
  17. 基于jsp+servlet的房屋出租系统
  18. Android P中的AVB校验(一)
  19. 微软专家话人生:成长中不可或缺的是信仰
  20. 拿酒杯的优雅姿态(组图)

热门文章

  1. 图灵——2015技术类新书TOP20
  2. 纪念乔布斯,推出四期iPad、iphone赠书活动【第一期】
  3. 拥抱iPhone,拥抱软件开发的未来
  4. Ubuntu下使用Anaconda安装opencv 解决无法读取视频
  5. 利用Python在Jetson TX2上抓取和显示摄像头影像
  6. Adversarial Discriminative Domain Adaption 阅读笔记
  7. 数据派研究组招募 | 寻找最志同道合的你!
  8. MIT类人机器人开始耍杂技了,看这个后空翻它漂亮吗?
  9. 独家 | 用随机森林预测“美版拼多多”商品销量
  10. 《深度学习,统计学习,数学基础》人工智能算法工程师手册:程序员写的AI书,50 章一网打尽...