0

JDK 1.7+Jung2 を使用。

類似度マトリックスがあり、jung2 グラフを使用してグラフィカルに分析したいと考えています。私のデータセットは、次のようなデータで構成されています。

object1 object2 0.54454
object1 object3 0.45634
object2 object3 0.90023
[..]

各行の値は、前のオブジェクト間の類似性を表します (つまり、object1 と object2 の類似性は 0.54454 です)。

頂点間の距離がエッジ値に比例するグラフを作成したいと考えています。上記の例では、sim(object1,object2) > sim(object2,object3) であるため、object1 は object3 よりも object2 の近くに配置されます。

Jung2を使用してそのようなタスクを達成するにはどうすればよいですか? デフォルトのレイアウトはこれを行わないようです。

4

1 に答える 1

0

これは、使用するレイアウトによって異なります。の場合、をコンストラクターにパラメーターとしてSpringLayout渡すことができます。これは、次のように簡単に実装できます。Transformerlength_function

class EdgeLengthTransformer implements Transformer<Edge, Integer> {
    @Override
    public Integer transform(Edge edge) {
        int minLength = 100; // Length for similarity 1.0
        int maxLength = 500; // Length for similarity 0.0
        Vertex v0 = graph.getSource(edge);
        Vertex v1 = graph.getDest(edge);
        float similarity = obtainSimilarityFromYourDataset(v0, v1);
        int length = (int)(minLength + (1.0 - similarity) * (maxLength - minLength));
        return length;
    }
}

グラフの構造によっては、必要に応じて頂点を配置できない場合があることを常に考慮する必要があります。たとえば、類似性がhttp://en.wikipedia.org/wiki/Triangle_inequalityに従わない場合、これらの類似性を 2D 空間に適切に埋め込むことはできません。

于 2014-01-25T18:46:23.417 に答える