私はbnlearnでネットワークを構築しますが、他のノードにエッジのないノードがいくつかありますので、削除したいと思います。 bnオブジェクトから特定のノードを削除するコマンドはありますか?bnlearnパッケージのベイジアンネットワークからノードをドロップ
答えて
私の試みはmodelstring
機能を使用することでした。文字列を取得し、それが円弧/辺がないことを知っているノードを削除する - これを手作業で行う - 新たに変更された文字列に保存し、コマンドをmodel2network
でネットワークに再度変換する。ここでは一連のコマンドは次のとおりです。
model.string <- modelstring(mymodel)
model.string
new.string <- "your string except the node you want to remove from the output above"
new.model <- model2network(new.string)
私はあなたが全部で多数のノードを持っていない(私は22を持っている)と、あなただけのリストからいくつかを削除したい場合はそれが働くだろうと思います。
希望に役立ちます!
ファビオラの回答が私にたくさんあります。
これは、モデル文字列を手作業で変更することなく同じことを行う方法です。
私が質問に答えるのはこれが初めてなので、フォーマットに関して私は簡単にしてください。
"net"は私のネットワークで、 "TARGET_NODE"は私が予測したいノードです(私はそれを削除しないことを二重にするためにリスト内に含めます)と "uniq"私のデータセットです。
model.string <- modelstring(net)
final_nodes <- unique(c(unlist(list(net$arcs)), TARGET_NODE))
nodes_to_delete <- paste("\\[",setdiff(names(net$nodes), final_nodes),"]", sep = "")
for (i in 1:length(nodes_to_delete)) {model.string <- gsub(nodes_to_delete[i], "", model.string)}
net <- model2network(model.string)
cols <- c(match(final_nodes, names(uniq)))
uniq <- uniq[,cols]
bnlearn
内蔵されていarc operations(ドキュメントもhere)このためだけに作られました。これらの関数は、ベイズネットワークが非周期的(非循環有向グラフ、またはDAG)である必要があるため、グラフのサイクルをチェックするメリットもあります。そうでなければ、無限ループが発生し、条件付き確率を計算できません。また、アークを追加するときにモデルの別の違反をチェックする引数(check.illegal
)もあります(ドキュメントを参照)。
しかし、その例は素晴らしいとは言えず、ドキュメントもありません。操作によってモデルが返されるため、古いモデルを返されたモデルで上書きする必要があります。 set.arc
セットがエッジを向けながら
data(learning.test)
# model ends up the same every time here, but may want
# to set random seed for reproducibility in other cases
set.seed(42)
model = tabu(learning.test) # tabu is a better algo than hc I think
plot(model)
model <- set.arc(model, "A", "F")
plot(model)
model <- drop.arc(model, "A", "F")
plot(model)
set.edge
セットは、エッジを無向。
- 1. Reingold-Tilfordの木グラフとしてRのbnlearnパッケージからヒルクライミングアルゴリズムの結果をプロットするエラー
- 2. catnetパッケージのベイジアンネットワーク:欠落しているデータの処理
- 3. サービスディスカバリから1つのノードを除くすべてのノードをドロップします
- 4. パッケージ・エクスプローラーからプラグイン・エディターにJavaメソッドをドラッグ&ドロップする
- 5. ベイジアンネットワークについて
- 6. 角度ui-treeドロップINTOノード
- 7. スパムフィルタリングのためのベイジアンネットワーク
- 8. ベイジアンネットワークでのOR関係
- 9. ノードのドロップを回避する方法
- 10. ベイジアンネットワーク(Rコード)における1つのノードの条件付き確率変更
- 11. docker:コンテナ間でパッケージをドロップする
- 12. パッケージ・ノードは、packages.config
- 13. ノード・アプリケーション外のノード・パッケージの使用
- 14. Javaを使用したベイジアンネットワークのAPI
- 15. ドラッグ&ドロップ*ブラウザから*
- 16. dynatreeからドラッグ&ドロップ
- 17. DragDetleを使ってTVirtualStringTreeからVCLコントロールにノードをドラッグ&ドロップする方法は?
- 18. php - データベースからのドロップ
- 19. ノードの永久(npmパッケージ)メモリリーク
- 20. KendoDropDownList - 1つのドロップから別のドロップまでのカスケードデータ
- 21. ベイジアンネットワークを使用した異常検出
- 22. NSTableViewとFinderからドラッグ&ドロップ
- 23. ブラウザからFineUploaderにドラッグ&ドロップ
- 24. 同じプロセスからのドロップの検出
- 25. SQLテーブルからのプライマリキーのドロップ
- 26. 異なるネストレベルでJTreeのノードをドロップする
- 27. 空のdynatreeにノードをドロップする方法
- 28. CノードのBSTからノードを削除
- 29. Cytoscape js内の他のノードにノードをドラッグ・アンド・ドロップする方法はありますか?
- 30. ドラッグ&ウェブブラウザに、Javaからテキストをドロップ
素晴らしいMery!よくやった! –
bnlearnに組み込まれているdrop.arc()を使用してください。私の答え[here](https://stackoverflow.com/a/48676996/4549682)を参照してください。 – wordsforthewise