影響力傳播模型中的獨立層疊模型(independent cascading model,ic模型),影響力傳播過程中,種子的影響力具備子模性(submodularity),即種子的邊際影響力增量會呈現遞減趨勢,celf演算法(cost-effective lazy-forward)利用這個發現改進了kempe&kleinberg的原始的greedy演算法,使得演算法的速度大幅提公升。下面說說具體是怎麼回事。
原始的greedy演算法:
input:圖g=,種子集合seeds=空集,種子數量k
output:種子集合seeds=
step 1:在seeds為空的條件下,一次算出g中每個節點v的邊際影響力δinfs【節點n的δinfs=(n加入當前種子集seeds後形成的新種子集seeds的影響力)-(當前seeds的影響力)】,並把各個節點按照δinfs降序排列。
step 2:把δinfs最大的節點加入seeds。例如下圖中a的邊際影響力最大,於是seeds=.
step 3:在新種子集seeds條件下,重新計算各個節點的邊際影響力δinfs,把δinfs最大的加入種子集。
step 4:重複step 3,直至種子集的節點個數達到k,輸出seeds,退出。
而celf演算法:根據ic模型條件下,節點的δinfs符合子模性,於是在a加入seeds後,在下一輪計算各個節點的邊際影響力δinfs時,如果計算出b的δinfs大於或等於上一輪中比它小且最接近它的那個節點(這裡是c)在上一輪中的δinfs,那麼這一輪就可以直接把b加入到seeds當中,而不用計算後面c,d,e...等節點的δinfs了,因為他們在這一輪的δinfs必定比上一輪自己的δinfs小,所以b就是這一輪最大的,所以選b沒錯,因此節省了很多計算步驟。
具體到下圖中,如果δb>=8,那麼b就是δinfs最大的節點,b可直接加入seeds,不用再計算δc,δd,δe等等,因為依據子模性(即邊際遞減規律),種子集seeds加入了a之後,δc必定小於等於8,δd必定小於等於7,δe必定小於等於5。這就是celf演算法能節省時間提高速度的原因。
那,如果這一輪b的δinfs沒有大於或者等於8呢?就逐個算出每個節點的δinfs,排序再挑最大的,放進seeds,然後重複上述過程。
社交網路影響力最大化 CELF演算法解決IM問題
celf資料集 facebook coding utf8 import numpy as np import time from collections import counter from igraph import import random import copy import matplo...
AdaBoost演算法原理
每個haar特徵對應看乙個弱分類器,但並不是任伺乙個haar特徵都能較好的描述人臉灰度分布的某一特點,如何從大量的haar特徵中挑選出最優的haar特徵並製作成分類器用於人臉檢測,這是adaboost演算法訓練過程所要解決的關鍵問題。paul viola和michael jones於2001年將ad...
Chord演算法(原理)
chrod 演算法是p2p中的四大演算法之一,是有mit 麻省理工學院 於2001年提出,其他三大演算法分別是 chord的目的是提供一種能在p2p網路快速定位資源的的演算法,cord並不關心資源是如何儲存的,只是從演算法層面研究資源的取得,因此chord的api就簡單到只有乙個set get。ch...