トピック分類確率から、各トピックを表すノードへのエッジをひいたグラフを作成

 前回トピックの分類確率ベクトルから、ポスター間の距離を決めてグラフを作成したのですが、そのグラフを見てもらったところ、「何で繋がっているのか分からない」「ムリに繋げているように思われる、内容が近いとは思えない」といった意見をいただきまして、今回はその原因を探してみました。

 とりあえず実装上の問題はありませんでしたが、各ポスターから「最低4本エッジをひく」という設定が甘かったようで、全然ちがうトピックのポスターとペアになっていたりすることが多かったことが分かりました。
 なので、とりあえずポスターがどのトピックに属しているのか分かりやすくしつつ、ポスター間にエッジをひくのをやめて、トピックを示すノード「T1〜Tn」を用意して、そこからエッジをひくようにしました。
 ポスターごとの分類確率を利用して、分類確率が大きいほどそのトピックを表すノードとのエッジの長さが短くなるように設定しました。今回もGvizで設定を進めていき、エッジの長さを「len」属性を使って設定していきました。

label = sprintf("%.2f", theta);
@gv.route :"p#{host_poster}" => :"t#{topic_id}"
@gv.edge :"p#{host_poster}_t#{topic_id}", label:label, len:(1.0-theta)

 また、今回は各ポスターを表すノードを、トピックごとに色分けする部分も実装しました。使用する属性は「colorscheme」と「color」です。

@gv.global layout: 'neato', overlap: false
@gv.edges arrowhead: 'none'
@gv.nodes style: "filled", colorscheme:"pastel19"

@gv.node :"t#{topic_id}", label:"T#{topic_id}", color:topic_id

 これでグラフを作成したところ、全ポスターが書くトピックの周辺に位置するようになって、ノードの配置もポスターの内容が近いものが集合するようになりました。
 グラフの見せ方の調整、特にノードの配置について、今回は上位2つまでの分類確率しか使っていなかったので、これをエッジはひかないが全ての分類確率を使ってノードを配置するようにしようと思います。
 また、このグラフがどのように作成された茅、意味するところをまとめて、グラフに添付できたら良いと思いますので、これも次回作成していこうと思います。