AP聚类算法的matlab部分程序,求解释!

Busylife1987 2012-06-26 10:20:45
% Compute responsibilities R(i,k)=S(i,k)-max{A(i,j)+S(i,j)} j=1,2,3,……N,j!=k

for ii=1:N %ii为公式中的k
old = R(:,ii);
AS = A(:,ii) + ST(:,ii); % 列向量
[Y,I]=max(AS); % I返回最大值的index
AS(I)=-Inf;
[Y2,I2]=max(AS); %
R(:,ii)=ST(:,ii)-Y;
R(I,ii)=ST(I,ii)-Y2;
R(:,ii)=(1-lam)*R(:,ii)+lam*old;% Damping
end;

请问这里为什么要要取次大值呢,且公式中的j!=k在哪里体现出来了?
...全文
600 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
回答楼主与楼上: R(I,ii)=ST(I,ii)-Y2; 相当于此时k = I ; 则 R(I,ii)=ST(I,ii) - max(AS(1:I-1,I+1:N,ii)),由于j!=k,所以排除AS(I); 而AS(I)是AS中的最大值,那么排除它所省的AS(1:I-1,I+1:N),它的最大值就是AS的次最大值,也就是Y2; 所以R(I,ii)=ST(I,ii)-Y2; 而其他行则减最大值Y即可; 最好是动手演算一下,更方便理解。
  • 打赏
  • 举报
回复
回答楼主与楼上: R(I,ii)=ST(I,ii)-Y2; 相当于此时k = I ; 则 R(I,ii)=ST(I,ii) - max(AS(1:I-1,I+1:N,ii)),由于j!=k,所以排除AS(I); 而AS(I)是AS中的最大值,那么排除它所省的AS(1:I-1,I+1:N),它的最大值就是AS的次最大值,也就是Y2; 所以R(I,ii)=ST(I,ii)-Y2; 而其他行则减最大值Y即可; 最好是动手演算一下,更方便理解。
  • 打赏
  • 举报
回复
回答楼主与楼上: R(I,ii)=ST(I,ii)-Y2; 相当于此时k = I ; 则 R(I,ii)=ST(I,ii) - max(AS(1:I-1,I+1:N,ii)),由于j!=k,所以排除AS(I); 而AS(I)是AS中的最大值,那么排除它所省的AS(1:I-1,I+1:N),它的最大值就是AS的次最大值,也就是Y2; 所以R(I,ii)=ST(I,ii)-Y2; 而其他行则减最大值Y即可; 最好是动手演算一下,更方便理解。
雨落vs断魂 2014-11-17
  • 打赏
  • 举报
回复
楼主,请问现在这个问题你搞懂了吗?能不能和我解释下,我刚看到ap算法的程序,这点也不是很懂
kbsp6 2014-03-20
  • 打赏
  • 举报
回复
这个程序贴完整了,应该不会难的。不知道 ST、lam是什么?
kbsp6 2014-03-20
  • 打赏
  • 举报
回复
求AP算法的完整代码。我想用一两个星期的课余时间来看看
卡普爷爷 2013-11-25
  • 打赏
  • 举报
回复
同问,有没有大神可以解答一下这个ap算法的代码怎么用啊?
Busylife1987 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
[Y,I]=max(AS); % I返回最大值的index
AS(I)=-Inf;
[Y2,I2]=max(AS); %
R(:,ii)=ST(:,ii)-Y; % 这里做减法用的是是最大值
R(I,ii)=ST(I,ii)-Y2; % 次最大值只用在ii列的原最大值那一行的那一个元素

多贴点代码,这里看不出j!=k和为什么要用用次最大值处理原最大值对应的元素

主要代码如下,请大家帮忙看看,困扰了很多天了:
[/Quote]
A=A'; R=R'; %A=zeros(N,N,class(s)) R=zeros(N,N,class(s))
for ii=1:N
old = R(:,ii);
AS = A(:,ii) + ST(:,ii); % 列向量
[Y,I]=max(AS); % I返回最大值的index
AS(I)=-Inf;
[Y2,I2]=max(AS); %
R(:,ii)=ST(:,ii)-Y;
R(I,ii)=ST(I,ii)-Y2;
R(:,ii)=(1-lam)*R(:,ii)+lam*old;% Damping
end;
A=A'; R=R';

% Compute availabilities A(i,k)=min{0,R(k,k)+∑j{max(0,R(j,k))}}
% R(k,k)=P(k)-max{A(i,j)+S(i,j)}
for jj=1:N
old = A(:,jj);
Rp = max(R(:,jj),0);
Rp(jj)=R(jj,jj);
A(:,jj) = sum(Rp)-Rp; %计算∑j{max(0,R(j,k))}},j≠k
dA = A(jj,jj);
A(:,jj) = min(A(:,jj),0);
A(jj,jj) = dA;
A(:,jj) = (1-lam)*A(:,jj) + lam*old;% Damping
end;

% Check for convergence收敛性
E=((diag(A)+diag(R))>0);%返回一个向量,大于零为1,小于或等于零为0
e(:,mod(i-1,convits)+1)=E; %
K=sum(E);
if i>=convits || i>=maxits, %计算终止
se=sum(e,2);%按行求和
unconverged=(sum((se==convits)+(se==0))~=N);
if (~unconverged&&(K>0))||(i==maxits)
dn=1;
end;
end;
libralibra 2012-06-26
  • 打赏
  • 举报
回复
[Y,I]=max(AS); % I返回最大值的index
AS(I)=-Inf;
[Y2,I2]=max(AS); %
R(:,ii)=ST(:,ii)-Y; % 这里做减法用的是是最大值
R(I,ii)=ST(I,ii)-Y2; % 次最大值只用在ii列的原最大值那一行的那一个元素


多贴点代码,这里看不出j!=k和为什么要用用次最大值处理原最大值对应的元素
Busylife1987 2012-06-26
  • 打赏
  • 举报
回复
自己顶一下

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧