Skip to content
Permalink
3b99e145f5
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.81 KB
package clustering;
import java.util.List;
import activity.ActivityFrame;
import clustering.ds.CSKSimpleCluster;
import clustering.ds.Instance;
import util.AdjacencyBackedSparseMatrix;
import util.SparseSimMatrix;
public class SimpleClusterSimilarity {
/**
* Vol of cluster with input is a 2-D array
* @param c
* @param simMatrix
* @return
*/
public static double volOfCluster(CSKSimpleCluster<ActivityFrame> c, double[][] simMatrix){
List<Instance<ActivityFrame>> 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<ActivityFrame> c, SparseSimMatrix simMatrix){
List<Instance<ActivityFrame>> 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<ActivityFrame> c, AdjacencyBackedSparseMatrix simMatrix){
List<Instance<ActivityFrame>> 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<ActivityFrame> 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<ActivityFrame> 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<ActivityFrame> 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<ActivityFrame> c1,
CSKSimpleCluster<ActivityFrame> c2, double[][] simMatrix){
List<Instance<ActivityFrame>> members1 = c1.getClusterMembers();
List<Instance<ActivityFrame>> 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<ActivityFrame> c1,
CSKSimpleCluster<ActivityFrame> c2, SparseSimMatrix simMatrix){
List<Instance<ActivityFrame>> members1 = c1.getClusterMembers();
List<Instance<ActivityFrame>> 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<ActivityFrame> c1,
CSKSimpleCluster<ActivityFrame> c2, AdjacencyBackedSparseMatrix simMatrix){
List<Instance<ActivityFrame>> members1 = c1.getClusterMembers();
List<Instance<ActivityFrame>> 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<ActivityFrame> c1,
CSKSimpleCluster<ActivityFrame> c2, double[][] simMatrix){
int total = c1.getClusterMembers().size() * c2.getClusterMembers().size();
return volOfInterClusters(c1, c2, simMatrix)/total;
}
}