Skip to content
Permalink
0d82ff1dc4
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
171 lines (163 sloc) 4.96 KB
package kb.howtokb.clustering;
import java.util.List;
import kb.howtokb.clustering.basicobj.CSKSimpleCluster;
import kb.howtokb.clustering.basicobj.Instance;
import kb.howtokb.taskframe.WikiHowTaskFrame;
import kb.howtokb.utils.AdjacencyBackedSparseMatrix;
import kb.howtokb.utils.SparseSimMatrix;
public class SimpleClusterSimilarity {
/**
* Vol of cluster with input is a 2-D array
* @param c
* @param simMatrix
* @return
*/
public static double volOfCluster(CSKSimpleCluster<WikiHowTaskFrame> c, double[][] simMatrix){
List<Instance<WikiHowTaskFrame>> members = c.getClusterMembers();
double sum = 0.0;
if (members.size() == 1) return 1.0;
for (int i=0; i<members.size()-1; i++){
for (int j=i+1; j<members.size(); j++){
sum += simMatrix[members.get(i).getID()][members.get(j).getID()];
}
}
// System.out.println(sum);
return sum;
}
/**
* input is a SparseMatrix
* @param c
* @param simMatrix
* @return
*/
public static double volOfCluster(CSKSimpleCluster<WikiHowTaskFrame> c, SparseSimMatrix simMatrix){
List<Instance<WikiHowTaskFrame>> members = c.getClusterMembers();
double sum = 0.0;
if (members.size() == 1) return 1.0;
for (int i=0; i<members.size()-1; i++){
for (int j=i+1; j<members.size(); j++){
sum += simMatrix.get(members.get(i).getID(), members.get(j).getID());
}
}
// System.out.println(sum);
return sum;
}
/**
* Input is DynamicSparseMatrix
* @param c
* @param simMatrix
* @return
*/
public static double volOfCluster(CSKSimpleCluster<WikiHowTaskFrame> c, AdjacencyBackedSparseMatrix simMatrix){
List<Instance<WikiHowTaskFrame>> members = c.getClusterMembers();
double sum = 0.0;
if (members.size() == 1) return 1.0;
for (int i=0; i<members.size()-1; i++){
for (int j=i+1; j<members.size(); j++){
sum += simMatrix.get(members.get(i).getID(), members.get(j).getID());
}
}
// System.out.println(sum);
return sum;
}
/**
* 2-D double array
* @param c
* @param simMatrix
* @return
*/
public static double averageIntraClusterSimilarity(CSKSimpleCluster<WikiHowTaskFrame> c, double[][] simMatrix){
int n = c.getClusterMembers().size();
int total = n*(n-1)/2;
System.out.println(volOfCluster(c, simMatrix)/total);
return volOfCluster(c, simMatrix)/total;
}
/**
* SparseMatrix
* @param c
* @param simMatrix
* @return
*/
public static double averageIntraClusterSimilarity(CSKSimpleCluster<WikiHowTaskFrame> c, SparseSimMatrix simMatrix){
int n = c.getClusterMembers().size();
int total = n*(n-1)/2;
double vol = volOfCluster(c, simMatrix)/total;
System.out.println(vol);
return vol;
}
/**
* DynamicSparseMatrix
* @param c
* @param simMatrix
* @return
*/
public static double averageIntraClusterSimilarity(CSKSimpleCluster<WikiHowTaskFrame> c, AdjacencyBackedSparseMatrix simMatrix){
int n = c.getClusterMembers().size();
int total = n*(n-1)/2;
double vol = volOfCluster(c, simMatrix)/total;
System.out.println(vol);
return vol;
}
/**
* 2-d double array
* @param c1
* @param c2
* @param simMatrix
* @return
*/
public static double volOfInterClusters(CSKSimpleCluster<WikiHowTaskFrame> c1,
CSKSimpleCluster<WikiHowTaskFrame> c2, double[][] simMatrix){
List<Instance<WikiHowTaskFrame>> members1 = c1.getClusterMembers();
List<Instance<WikiHowTaskFrame>> members2 = c2.getClusterMembers();
double sum = 0.0;
for (int i=0; i<members1.size(); i++){
for (int j=0; j<members2.size(); j++){
sum += simMatrix[members1.get(i).getID()][members2.get(j).getID()];
}
}
return sum;
}
/**
* sparseMatrix
* @param c1
* @param c2
* @param simMatrix
* @return
*/
public static double volOfInterClusters(CSKSimpleCluster<WikiHowTaskFrame> c1,
CSKSimpleCluster<WikiHowTaskFrame> c2, SparseSimMatrix simMatrix){
List<Instance<WikiHowTaskFrame>> members1 = c1.getClusterMembers();
List<Instance<WikiHowTaskFrame>> members2 = c2.getClusterMembers();
double sum = 0.0;
for (int i=0; i<members1.size(); i++){
for (int j=0; j<members2.size(); j++){
sum += simMatrix.get(members1.get(i).getID(),members2.get(j).getID());
}
}
return sum;
}
/**
* DynamicSparseMatrix
* @param c1
* @param c2
* @param simMatrix
* @return
*/
public static double volOfInterClusters(CSKSimpleCluster<WikiHowTaskFrame> c1,
CSKSimpleCluster<WikiHowTaskFrame> c2, AdjacencyBackedSparseMatrix simMatrix){
List<Instance<WikiHowTaskFrame>> members1 = c1.getClusterMembers();
List<Instance<WikiHowTaskFrame>> members2 = c2.getClusterMembers();
double sum = 0.0;
for (int i=0; i<members1.size(); i++){
for (int j=0; j<members2.size(); j++){
sum += simMatrix.get(members1.get(i).getID(),members2.get(j).getID());
}
}
return sum;
}
public static double averageInterClusterSimilarity(CSKSimpleCluster<WikiHowTaskFrame> c1,
CSKSimpleCluster<WikiHowTaskFrame> c2, double[][] simMatrix){
int total = c1.getClusterMembers().size() * c2.getClusterMembers().size();
return volOfInterClusters(c1, c2, simMatrix)/total;
}
}