Search in sources :

Example 16 with structures._HDPThetaStar

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

the class MTCLinAdaptWithMMB method saveUserMembership.

// save the user mixture membership into a file
public void saveUserMembership(String clusterdir, String filename) {
    PrintWriter writer;
    File dir = new File(clusterdir);
    if (!dir.exists())
        dir.mkdirs();
    try {
        writer = new PrintWriter(new File(clusterdir + "/UserMembership.txt"));
        for (_AdaptStruct u : m_userList) {
            _MMBAdaptStruct user = (_MMBAdaptStruct) u;
            writer.write(String.format("%s\n", u.getUserID()));
            // write the clusters with edges first
            for (_HDPThetaStar theta : user.getHDPTheta4Edge()) {
                writer.write(String.format("(%d, %d, %d)\t", theta.getIndex(), user.getHDPThetaMemSize(theta), user.getHDPThetaEdgeSize(theta)));
            }
            // write the clusters with members then
            for (_HDPThetaStar theta : user.getHDPTheta4Rvw()) {
                if (!user.getHDPTheta4Edge().contains(theta))
                    writer.write(String.format("(%d, %d, %d)\t", theta.getIndex(), user.getHDPThetaMemSize(theta), user.getHDPThetaEdgeSize(theta)));
            }
            writer.write("\n");
        }
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
Also used : Classifier.supervised.modelAdaptation._AdaptStruct(Classifier.supervised.modelAdaptation._AdaptStruct) structures._HDPThetaStar(structures._HDPThetaStar) FileNotFoundException(java.io.FileNotFoundException) File(java.io.File) PrintWriter(java.io.PrintWriter)

Example 17 with structures._HDPThetaStar

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

the class CLRWithHDP method calculateClusterProbPerUser.

@Override
protected // Indeed, it is for per review, for inheritance we don't change the function name.
void calculateClusterProbPerUser() {
    double prob, logSum;
    double[] probs;
    if (m_newCluster)
        probs = new double[m_kBar + 1];
    else
        probs = new double[m_kBar];
    _HDPAdaptStruct user;
    _HDPThetaStar curTheta;
    // sample a new cluster parameter first.
    if (m_newCluster) {
        // to make it consistent since we will only use one auxiliary variable
        m_hdpThetaStars[m_kBar].setGamma(m_gamma_e);
        m_G0.sampling(m_hdpThetaStars[m_kBar].getModel());
    }
    for (int i = 0; i < m_userList.size(); i++) {
        user = (_HDPAdaptStruct) m_userList.get(i);
        if (user.getTestSize() == 0)
            continue;
        for (_Review r : user.getReviews()) {
            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;
            }
            logSum = Utils.logSumOfExponentials(probs);
            for (int k = 0; k < probs.length; k++) probs[k] -= logSum;
            // posterior in log space
            r.setClusterPosterior(probs);
        }
    }
}
Also used : structures._Review(structures._Review) structures._HDPThetaStar(structures._HDPThetaStar)

Example 18 with structures._HDPThetaStar

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

the class CLRWithHDP method printTopWords.

void printTopWords(_HDPThetaStar cluster) {
    MyPriorityQueue<_RankItem> wordRanker = new MyPriorityQueue<_RankItem>(30);
    double[] lmStat = cluster.getLMStat();
    double[] phi = cluster.getModel();
    int[] tfs = m_tf_count[cluster.getIndex()];
    double tf;
    // features with positive/negative weights (skip the bias term)
    System.out.format("Cluster %d (%d)\n[positive]: ", cluster.getIndex(), cluster.getMemSize());
    for (int i = 1; i < phi.length; i++) {
        tf = tfs[i - 1] == 0 ? 0.1 : tfs[i - 1];
        // top positive words with expected polarity
        wordRanker.add(new _RankItem(i, phi[i] * tf));
    }
    for (_RankItem it : wordRanker) System.out.format("%s:%.3f\t", m_features[it.m_index], phi[it.m_index]);
    // features with negative weights
    wordRanker.clear();
    System.out.format("\n[negative]: ");
    for (int i = 1; i < phi.length; i++) {
        tf = tfs[i - 1] == 0 ? 0.1 : tfs[i - 1];
        // top negative words
        wordRanker.add(new _RankItem(i, -phi[i] * tf));
    }
    for (_RankItem it : wordRanker) System.out.format("%s:%.3f\t", m_features[it.m_index], phi[it.m_index]);
    // features with highest frequency
    wordRanker.clear();
    System.out.format("\n[popular]: ");
    for (int i = 0; i < lmStat.length; i++) // top positive words with expected polarity
    wordRanker.add(new _RankItem(i, lmStat[i]));
    for (_RankItem it : wordRanker) System.out.format("%s:%.1f\t", m_lmFeatures.get(it.m_index), lmStat[it.m_index]);
    System.out.println();
}
Also used : structures._RankItem(structures._RankItem) MyPriorityQueue(structures.MyPriorityQueue)

Example 19 with structures._HDPThetaStar

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

the class CLRWithMMB method loadUsers.

@Override
public void loadUsers(ArrayList<_User> userList) {
    m_userList = new ArrayList<_AdaptStruct>();
    for (_User user : userList) m_userList.add(new _MMBAdaptStruct(user));
    m_pWeights = new double[m_gWeights.length];
    m_indicator = new _HDPThetaStar[m_userList.size()][m_userList.size()];
}
Also used : Classifier.supervised.modelAdaptation._AdaptStruct(Classifier.supervised.modelAdaptation._AdaptStruct) structures._User(structures._User)

Example 20 with structures._HDPThetaStar

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

the class CLRWithMMB method calculateMixture4TrainUser.

// calculate the mixture for train user based on review assignment and edge assignment
public void calculateMixture4TrainUser(_MMBAdaptStruct user) {
    double sum = 0;
    double[] probs = new double[m_kBar];
    _HDPThetaStar theta;
    // The set of clusters for review and edge could be different, just iterate over kBar
    for (int k = 0; k < m_kBar; k++) {
        theta = m_hdpThetaStars[k];
        probs[k] = user.getHDPThetaMemSize(theta) + user.getHDPThetaEdgeSize(theta);
        sum += probs[k];
    }
    for (int k = 0; k < m_kBar; k++) {
        probs[k] /= sum;
    }
    user.setMixture(probs);
}
Also used : 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