ProM5 - Hamming distance in Social Network Miner (Similar task)
  • gracegrace
    Posts: 15
    Hi all,
    Trying to understand how the social network miner works, I'm experimenting some troubles with the "Similar task" metrics. In particular, it seems that the Hamming distance implementation differs from the definition given in the corresponding paper.

    In practice, instead of the distance function defined in the paper:

    d(x,y) = 0 if ((x>0 && y>0) || (x == y == 0))
    = 1 otherwise

    in UtilOperation.java, line 110, the following distance function is implemented:

    d'(x,y) = 0 if (x == y)
    = 1 otherwise

    that is, if A performs activity act 1 time and B performs the same activity 2 times, their distance with respect to act is 0 for d and 1 for d'.

    Is my obvservation correct? I am not sure about d', that I extracted from the code. If I am right, why the implemented distance differs from the paper one?

    Moreover, it sounds strange to me also the calculation of the overall distance between originators A,B as

    (column - temp) / column

    (line 114), because a greater temp (which counts how many times activitites differ) leads to a smaller distance, while I would expect

    temp/column

    which assigns a greater value to those pair having a smaller distance.

    In this case is simply a issue of inversion, but again I think that there is a discrepancy between the paper and the implementation. There is no problem, except that a user is not sure of the meaning of a greater or lower value on the edge from A to B (maybe the convention is written somewhere and I didn't find out that place).

  • I think you misunderstood the code.
    In line 110, it checks whether values are equal or not. If two values are different, it increase the variable 'temp'. Then a hamming value is obtained by (column - temp) / column.
    Minseok.
  • gracegrace
    Posts: 15
    The point is that temp (according to the paper, if I'm right) should be increment not when the values are different, but when one value is zero and other is not zero.
  • Before line 110, it preprocesses a matrix (please see the m.forEachNonZero()) which changes a value into 1 if it is bigger than 0. Thus checking the difference is enough. I mean when one value is zero and other is not zero, the "temp" will be 1.
    ps. When I tested the code with test cases, it worked well. Could you send me an example which makes the problem? Then, it will be a big help for me to fix it.
    Post edited by msong at 2010-09-09 23:36:17
  • gracegrace
    Posts: 15
    Thank to your help I realized that I'm wrong, the point is that I was not able to see how the cern package is implemented.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

In this Discussion

Tagged