Марковский алгоритм кластеризации

Я проработал следующий пример деталей Маркова. Алгоритм кластеризации:

http://www.cs.ucsb.edu/~xyan/classes/CS595D-2009winter/MCL_Presentation2.pdf

Мне кажется, что я точно представил алгоритм, но не получаю тех же результатов что это руководство, по крайней мере, получило за этот вклад.

Текущий код: http://jsfiddle.net/methodin/CtGJ9/

Я не уверен, что, возможно, я просто пропустил небольшой факт или мне просто нужно где-то немного подправить для этого, но я попробовал несколько вариантов, включая:

  1. Замена инфляции / расширения
  2. Проверка равенства на основе точности
  3. Удаление нормализации (поскольку исходное руководство не требовало этого, хотя в официальной документации MCL говорится о нормализации матрицы на каждом проходе)

Все они вернули один и тот же результат - узел влияет только на себя.

Я даже нашел похожую реализацию алгоритма в VB: http://mcl.codeplex.com/SourceControl/changeset/changes/17748#MCL%2fMCL%2fMatrix.vb

И мой код, кажется, совпадает за исключением их нумерации (600 - расстояние, например ).

Это функция расширения

// Take the (power)th power of the matrix effectively multiplying it with
// itself pow times
this.matrixExpand = function(matrix, pow) {
    var resultMatrix = [];
    for(var row=0;row

И это функция надувания

// Applies a power of X to each item in the matrix
this.matrixInflate = function(matrix, pow) {
    for(var row=0;row

И, наконец, основная функция Passthru

// Girvan–Newman algorithm
this.getMarkovCluster = function(power, inflation) {
    var lastMatrix = [];

    var currentMatrix = this.getAssociatedMatrix();
    this.print(currentMatrix);        
    this.normalize(currentMatrix);  

    currentMatrix = this.matrixExpand(currentMatrix, power);    
    this.matrixInflate(currentMatrix, inflation);                               
    this.normalize(currentMatrix);

    while(!this.equals(currentMatrix,lastMatrix)) {
        lastMatrix = currentMatrix.slice(0);

        currentMatrix = this.matrixExpand(currentMatrix, power);                
        this.matrixInflate(currentMatrix, inflation);         
        this.normalize(currentMatrix);            
    }
    return currentMatrix;
};

8
задан methodin 6 January 2012 в 21:05
поделиться