乾貨回顧丨機器學習筆記-----AP(affinity propagat)演算法講解及matlab實現
在統計和資料探勘中,親和傳播(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;
總結:演算法講解部分到這裡結束了。謝謝大家,能否走一波關注?哈哈
相關文章
- 【機器學習】機器學習面試乾貨精講機器學習面試
- redis - 學習筆記回顧Redis筆記
- 回顧·機器學習/深度學習工程實戰機器學習深度學習
- 吳恩達機器學習筆記 —— 3 線性迴歸回顧吳恩達機器學習筆記
- 【機器學習】乾貨丨機器學習知識點;機器學習模型的“可解釋性”到底有多重要?機器學習模型
- 機器學習演算法學習筆記機器學習演算法筆記
- 乾貨丨機器學習知識點(人工智慧篇)機器學習人工智慧
- 活動精彩回顧|GopherChina 2019乾貨回顧!Go
- 機器學習中的聚類演算法演變及學習筆記機器學習聚類演算法筆記
- 機器學習筆記(KNN演算法)機器學習筆記KNN演算法
- 第3講回顧:聯邦學習FATE演算法模組梳理及建模演示聯邦學習演算法
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- 機器學習2020年回顧 - Kristóf機器學習
- 機器學習實戰筆記-k近鄰演算法機器學習筆記演算法
- Matlab學習筆記(一)Matlab筆記
- <react學習筆記(5)>知識點回顧(1)React筆記
- python機器學習筆記:EM演算法Python機器學習筆記演算法
- 機器學習演算法:Logistic迴歸學習筆記機器學習演算法筆記
- 機器學習學習筆記機器學習筆記
- 【乾貨】機器學習和深度學習概念入門機器學習深度學習
- 機器學習筆記機器學習筆記
- 機器學習學習筆記之——演算法鏈與管道機器學習筆記演算法
- 機器學習之決策樹詳細講解及程式碼講解機器學習
- 機器學習筆記(1): 梯度下降演算法機器學習筆記梯度演算法
- 串的應用與kmp演算法講解--學習筆記KMP演算法筆記
- 機器學習回顧篇(3):線性迴歸機器學習
- Golang 學習筆記(五)- archive/zip 實現壓縮及解壓Golang筆記Hive
- 【Python機器學習實戰】感知機和支援向量機學習筆記(三)之SVM的實現Python機器學習筆記
- 演算法學習回顧-皇后問題演算法
- [MatLab]學習筆記2:MatLab數值資料Matlab筆記
- 《機器學習初步》筆記機器學習筆記
- 機器學習之step by step實戰及知識積累筆記機器學習筆記
- matlab學習筆記一:安裝Matlab筆記
- FSM自動售貨機 verilog 實現及 code 細節講解
- 機器學習回顧篇(2):最小二乘法機器學習
- 機器學習演算法筆記之5:支援向量機SVM機器學習演算法筆記
- Golang 學習筆記(四)- archive/tar 實現打包壓縮及解壓Golang筆記Hive
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類