Bayesovská síť víry nebo Bayesovská síť či síť víry je pravděpodobnostní grafický model (PGM), který reprezentuje podmíněné závislosti mezi náhodnými veličinami prostřednictvím směrovaného acyklického grafu (DAG).
Dnes se pokusím vysvětlit hlavní aspekty sítí víry, zejména pro aplikace, které mohou souviset s analýzou sociálních sítí(SNA). Kromě toho vám ukážu příklad implementace tohoto druhu sítě.
K čemu používáme bayesovské sítě?
Bayesovské sítě se uplatňují v mnoha oblastech. Například diagnostika nemocí, optimalizované vyhledávání na webu, filtrování spamu, genové regulační sítě atd. A tento výčet lze ještě rozšířit. Hlavním cílem těchto sítí je snaha o pochopení struktury kauzálních vztahů. Abychom to objasnili, uvažujme problém diagnostiky onemocnění. S danými příznaky a jejich výslednou nemocí zkonstruujeme naši síť víry, a když přijde nový pacient, můžeme odvodit, jakou nemoc nebo nemoci může mít nový pacient, a to tak, že pro každou nemoc stanovíme pravděpodobnost. Podobně lze tyto kauzální vztahy konstruovat i pro jiné problémy a inferenční techniky použít k zajímavým výsledkům.
Rychlý přehled pravděpodobnosti
Než budeme pokračovat, pro osvěžení paměti uvedu definici podmíněné vlastnosti. Podmíněná pravděpodobnost je pravděpodobnost náhodné veličiny, je-li dána nějaká jiná náhodná veličina. Vyplývá to ze vztahu
Jsou-li tyto dvě náhodné veličiny závislé,
Jsou-li nezávislé, pak
Matematická definice sítí víry
Pravděpodobnosti se vypočítají. v sítích víry podle následujícího vzorce
Jak byste pochopili ze vzorce, abychom mohli vypočítat společné rozdělení, potřebujeme mít k dispozici podmíněné pravděpodobnosti uvedené v síti. Ale dále, že pokud máme společné rozdělení, můžeme si začít klást zajímavé otázky. Například v prvním příkladu se ptáme na pravděpodobnost „DEŠT“, pokud „SEASON“ je „ZIMA“ a „Psí štěkot“ je „PRAVDA“.
Příklad Belief Network v Pythonu
Takže, myslím, že teorie už bylo dost a pojďme se podívat na nějaký reálný příklad s mým současným oblíbeným programovacím jazykem Python ❤️ Než budeme pokračovat, najdete zde zápisník Jupyter, který jsem napsal.
# create the nodes
season = BbnNode(Variable(0, 'season', ), )
atmos_pres = BbnNode(Variable(1, 'atmos_press', ), )
allergies = BbnNode(Variable(2, 'allergies', ), )
rain = BbnNode(Variable(3, 'rain', ), )
grass = BbnNode(Variable(4, 'grass', ), )
umbrellas = BbnNode(Variable(5, 'umbrellas', ), )
dog_bark = BbnNode(Variable(6, 'dog_bark', ), )
cat_mood = BbnNode(Variable(7, 'cat_mood', ), )
cat_hide = BbnNode(Variable(8, 'cat_hide', ), )bbn = Bbn() \
.add_node(season) \
.add_node(atmos_pres) \
.add_node(allergies) \
.add_node(rain) \
.add_node(grass) \
.add_node(umbrellas) \
.add_node(dog_bark) \
.add_node(cat_mood) \
.add_node(cat_hide) \
.add_edge(Edge(season, allergies, EdgeType.DIRECTED)) \
.add_edge(Edge(season, umbrellas, EdgeType.DIRECTED)) \
.add_edge(Edge(season, rain, EdgeType.DIRECTED)) \
.add_edge(Edge(atmos_pres, rain, EdgeType.DIRECTED)) \
.add_edge(Edge(rain, grass, EdgeType.DIRECTED)) \
.add_edge(Edge(rain, umbrellas, EdgeType.DIRECTED)) \
.add_edge(Edge(rain, dog_bark, EdgeType.DIRECTED)) \
.add_edge(Edge(rain, cat_mood, EdgeType.DIRECTED)) \
.add_edge(Edge(dog_bark, cat_hide, EdgeType.DIRECTED)) \
.add_edge(Edge(cat_mood, cat_hide, EdgeType.DIRECTED))
Naše uzly jsme nejprve popsali pomocí podmíněných pravděpodobností. Měli byste si všimnout, že jsem pro jednoduchost vynechal některé možné hodnoty stavu. Například proměnná roční období nabývá jiných hodnot „jaro“ a „podzim“. Myšlenka je tedy stejná.
No, zkontrolujme, zda je naše síť zkonstruována správně, nebo ne.
with warnings.catch_warnings():
warnings.simplefilter('ignore')
graph = convert_for_drawing(bbn)
pos = nx.nx_agraph.graphviz_layout(graph, prog='neato')plt.figure(figsize=(20, 10))
plt.subplot(121)
labels = dict()
nx.draw(graph, pos=pos, with_labels=True, labels=labels)
plt.title('BBN DAG')
Výsledkem tohoto úryvku kódu by byl následující graf
To je velmi naivní Bayesovská síť. Kromě určení důležitosti uzlů může být další aplikací hledání nějakého specifického typu uzlů. Uvažujme Sociální síť, ve které jsou nějací lidé, kteří jsou potenciálními vůdci, a já je chci vyhledat. Uvažujme následující graf
Tato trochu složitější síť nám pomůže určit nejistotu uzlů souvisejících s tím, že jsou vůdci.
Další aplikací bude odvozování vazeb. Nové vazby lze odvodit ze stávajících vazeb. Například z členství ve skupině v sociální síti lze odvodit pravděpodobnou členskou vazbu. Měl jsem na mysli, že můžeme modelovat novou vazbu mezi uživateli a skupinami s ohledem na existující vazby. Viz následující modelové schéma
Toto jsou tedy základní příklady toho, jak lze Bayesovské sítě použít v SNA. Toto téma není příliš prostudované, ale myslím, že by mohlo být velmi užitečné se jím dále zabývat.
Závěr
Nejtěžší na Bayesovských sítích je navrhování. Zvláště, když si vzpomenete na SNA, zkonstruovat mapování ze Sociální sítě pomocí Bayesovské sítě je spíše umění než věda 😃 Ale jakmile jste odvedli uměleckou práci a navrhli svůj model velmi dobře, mohou vám tyto šikovné nástroje říci mnoho věcí. Jak víme, Bayesovské sítě se uplatňují v rozsáhlých druzích oblastí. Ve většině případů fungovaly velmi dobře. Proto pevně věřím, že i na sociálních sítích můžeme učinit velmi hluboké závěry.
Pro další zkoumání pomocí SNA a Bayesovských sítí, prosím, zůstaňte naladěni 🚀
.