Search in sources :

Example 6 with structures._HDPThetaStar._Connection

use of structures._HDPThetaStar._Connection in project IR_Base by Linda-sunshine.

the class CLRWithMMB method updateEdgeMembership.

public void updateEdgeMembership(int i, int j, int e) {
    _MMBAdaptStruct ui = (_MMBAdaptStruct) m_userList.get(i);
    _MMBAdaptStruct uj = (_MMBAdaptStruct) m_userList.get(j);
    int index = -1;
    _HDPThetaStar thetai = ui.getThetaStar(uj);
    // remove the neighbor from user
    ui.rmNeighbor(uj);
    // update the edge information inside the user
    ui.incHDPThetaStarEdgeSize(thetai, -1);
    // update the edge count for the thetastar
    thetai.updateEdgeCount(e, -1);
    m_MNL[e]--;
    // No data associated with the cluster
    if (thetai.getMemSize() == 0 && thetai.getTotalEdgeSize() == 0) {
        System.out.println("[Info]Zero cluster detected in updating doc!");
        // recycle the gamma
        m_gamma_e += thetai.getGamma();
        // swap the disabled theta to the last for later use
        index = findHDPThetaStar(thetai);
        if (index == -1)
            System.out.println("Bug");
        // move it back to \theta*
        swapTheta(m_kBar - 1, index);
        thetai.reset();
        m_kBar--;
    }
}
Also used : structures._HDPThetaStar(structures._HDPThetaStar)

Example 7 with structures._HDPThetaStar._Connection

use of structures._HDPThetaStar._Connection in project IR_Base by Linda-sunshine.

the class CLRWithMMB method printBMatrix.

public void printBMatrix(String filename) {
    // Get the B matrix
    int idx = filename.indexOf("txt");
    String zerofile = filename.substring(0, idx - 1) + "_0.txt";
    String onefile = filename.substring(0, idx - 1) + "_1.txt";
    int[] eij;
    int[][][] B = new int[m_kBar][m_kBar][2];
    _HDPThetaStar theta1;
    int index1 = 0, index2 = 0;
    for (int i = 0; i < m_kBar; i++) {
        theta1 = m_hdpThetaStars[i];
        index1 = theta1.getIndex();
        HashMap<_HDPThetaStar, _Connection> connectionMap = theta1.getConnectionMap();
        for (_HDPThetaStar theta2 : connectionMap.keySet()) {
            index2 = theta2.getIndex();
            eij = connectionMap.get(theta2).getEdge();
            B[index1][index2][0] = eij[0];
            B[index1][index2][1] = eij[1];
        }
    }
    try {
        // print out the zero edges in B matrix
        PrintWriter writer = new PrintWriter(new File(zerofile), "UTF-8");
        for (int i = 0; i < B.length; i++) {
            int[][] row = B[i];
            for (int j = 0; j < row.length; j++) {
                writer.write(String.format("%d", B[i][j][0]));
                if (j != row.length - 1) {
                    writer.write("\t");
                }
            }
            writer.write("\n");
        }
        writer.close();
        // print out the one edges in B matrix
        writer = new PrintWriter(new File(onefile), "UTF-8");
        for (int i = 0; i < B.length; i++) {
            int[][] row = B[i];
            for (int j = 0; j < row.length; j++) {
                writer.write(String.format("%d", B[i][j][1]));
                if (j != row.length - 1) {
                    writer.write("\t");
                }
            }
            writer.write("\n");
        }
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Also used : structures._HDPThetaStar(structures._HDPThetaStar) structures._HDPThetaStar._Connection(structures._HDPThetaStar._Connection) IOException(java.io.IOException) File(java.io.File) PrintWriter(java.io.PrintWriter)

Example 8 with structures._HDPThetaStar._Connection

use of structures._HDPThetaStar._Connection in project IR_Base by Linda-sunshine.

the class CLRWithMMB method printClusterInfo.

public void printClusterInfo(String filename) {
    try {
        _HDPThetaStar theta;
        PrintWriter writer = new PrintWriter(new File(filename));
        for (int k = 0; k < m_kBar; k++) {
            theta = m_hdpThetaStars[k];
            writer.write(String.format("%d,%d,%d\n", theta.getMemSize(), theta.getEdgeSize(0), theta.getEdgeSize(1)));
        }
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
Also used : structures._HDPThetaStar(structures._HDPThetaStar) FileNotFoundException(java.io.FileNotFoundException) File(java.io.File) PrintWriter(java.io.PrintWriter)

Example 9 with structures._HDPThetaStar._Connection

use of structures._HDPThetaStar._Connection in project IR_Base by Linda-sunshine.

the class CLRWithMMB method accumulateLikelihoodEMMB.

// traverse all the clusters to get the likelihood given by mmb edges
protected double accumulateLikelihoodEMMB() {
    double likelihoodE = 0;
    _Connection connection;
    int e_0, e_1;
    _HDPThetaStar theta_g, theta_h;
    for (int g = 0; g < m_kBar; g++) {
        theta_g = m_hdpThetaStars[g];
        for (int h = g; h < m_kBar; h++) {
            theta_h = m_hdpThetaStars[h];
            if (!theta_g.hasConnection(theta_h))
                continue;
            connection = theta_g.getConnection(theta_h);
            e_1 = connection.getEdge()[1];
            e_0 = connection.getEdge()[0];
            // likelihoodE: m*log(rho*(a+e_1))/(a+b+e_0+e_1))+n*log(rho*(b+e_0))/(a+b+e_0+e_1))
            likelihoodE += (e_0 + e_1) * Math.log(m_rho) + e_1 * Math.log(m_abcd[0] + e_1) + e_0 * Math.log(m_abcd[1] + e_0) - (e_0 + e_1) * Math.log(m_abcd[0] + m_abcd[1] + e_0 + e_1);
        // likelihoodE += e_1*Math.log(m_abcd[0]+e_1)+e_0*Math.log(m_abcd[1]+e_0)
        // -(e_0+e_1)*Math.log(m_abcd[0]+m_abcd[1]+e_0+e_1);
        }
    }
    return likelihoodE;
}
Also used : structures._HDPThetaStar(structures._HDPThetaStar) structures._HDPThetaStar._Connection(structures._HDPThetaStar._Connection)

Example 10 with structures._HDPThetaStar._Connection

use of structures._HDPThetaStar._Connection in project IR_Base by Linda-sunshine.

the class CLRWithMMB method calculateMixture4TestUser.

// calculate the mixture for test user based on review assignment
public void calculateMixture4TestUser(_MMBAdaptStruct user) {
    int cIndex = 0;
    double prob, logSum, sum = 0;
    double[] probs = new double[m_kBar];
    _HDPThetaStar curTheta;
    // calculate the cluster assignment for each review first
    for (_Review r : user.getReviews()) {
        // suppose all reviews are test review in this setting
        if (r.getType() != rType.TEST)
            continue;
        for (int k = 0; k < probs.length; k++) {
            curTheta = m_hdpThetaStars[k];
            r.setHDPThetaStar(curTheta);
            prob = calcLogLikelihoodX(r) + Math.log(calcGroupPopularity(user, k, curTheta.getGamma()));
            probs[k] = prob;
        }
        // normalize the prob
        logSum = Utils.logSumOfExponentials(probs);
        for (int k = 0; k < probs.length; k++) probs[k] -= logSum;
        // take the cluster that has maximum prob as the review's cluster assignment
        curTheta = m_hdpThetaStars[Utils.argmax(probs)];
        r.setHDPThetaStar(curTheta);
        // update the cluster assignment for the user
        user.incHDPThetaStarMemSize(r.getHDPThetaStar(), 1);
    }
    // calculate the mixture: get the review assignment and normalize it
    Arrays.fill(probs, 0);
    // calculate the sum first
    for (_HDPThetaStar theta : user.getHDPTheta4Rvw()) {
        sum += user.getHDPThetaMemSize(theta);
    }
    // calculate the prob for each dim
    for (_HDPThetaStar theta : user.getHDPTheta4Rvw()) {
        cIndex = theta.getIndex();
        probs[cIndex] = user.getHDPThetaMemSize(theta) / sum;
    }
    user.setMixture(probs);
}
Also used : structures._Review(structures._Review) structures._HDPThetaStar(structures._HDPThetaStar)

Aggregations

structures._HDPThetaStar (structures._HDPThetaStar)26 structures._Review (structures._Review)6 Classifier.supervised.modelAdaptation._AdaptStruct (Classifier.supervised.modelAdaptation._AdaptStruct)4 File (java.io.File)4 PrintWriter (java.io.PrintWriter)4 structures._HDPThetaStar._Connection (structures._HDPThetaStar._Connection)3 FileNotFoundException (java.io.FileNotFoundException)2 IOException (java.io.IOException)2 MyPriorityQueue (structures.MyPriorityQueue)2 structures._RankItem (structures._RankItem)2 structures._SparseFeature (structures._SparseFeature)2 structures._User (structures._User)2