Commit acab277e authored by Michal Balazia's avatar Michal Balazia
Browse files

distance map

parent 07d6abac
package algorithms; package algorithms;
import Jama.EigenvalueDecomposition;
import Jama.Matrix;
import objects.Template;
public class Classifier1NNNareshKumarMS extends Classifier { public class Classifier1NNNareshKumarMS extends Classifier {
public Classifier1NNNareshKumarMS() { public Classifier1NNNareshKumarMS() {
...@@ -11,39 +7,4 @@ public class Classifier1NNNareshKumarMS extends Classifier { ...@@ -11,39 +7,4 @@ public class Classifier1NNNareshKumarMS extends Classifier {
decision.setDistanceTemplates(new DistanceTemplatesNareshKumarMS()); decision.setDistanceTemplates(new DistanceTemplatesNareshKumarMS());
setDecision(decision); setDecision(decision);
} }
public final class DistanceTemplatesNareshKumarMS extends DistanceTemplates {
public DistanceTemplatesNareshKumarMS() {
}
@Override
public String getDescription() {
return "NareshKumarMS";
}
@Override
public double getDistance(Template template1, Template template2) {
double sum = 0.0;
double[] generalizedEigenvalues = new EigenvalueDecomposition(getCovarianceMatrix(template2).inverse().times(getCovarianceMatrix(template1))).getRealEigenvalues();
for (int l = 0; l < generalizedEigenvalues.length; l++) {
sum += Math.pow(Math.log(Math.abs(generalizedEigenvalues[l])), 2);
}
return Math.sqrt(sum);
}
private Matrix getCovarianceMatrix(Template template) {
Matrix matrix = template.getMatrix();
int rows = matrix.getRowDimension();
int columns = matrix.getColumnDimension();
Matrix covarianceMatrix = new Matrix(columns, columns);
for (int r = 0; r < rows; r++) {
Matrix d = matrix.getMatrix(r, r, 0, columns - 1);
Matrix u = getDistanceTemplatesMatrix().getMatrix(r, r, 0, columns - 1);
Matrix diff = d.minus(u);
covarianceMatrix.plusEquals((diff.transpose().times(diff)).times((double) 1 / (rows - 1)));
}
return covarianceMatrix;
}
}
} }
...@@ -39,8 +39,15 @@ public class ClassifierTransform1NNMMCMahalanobis extends ClassifierTransform { ...@@ -39,8 +39,15 @@ public class ClassifierTransform1NNMMCMahalanobis extends ClassifierTransform {
double[] column = (getMeanMatrix(samplesOfClass).minus(meanSampleMatrix)).times(Math.sqrt((double) samplesOfClass.size() / numberOfSamples)).getColumnPackedCopy(); double[] column = (getMeanMatrix(samplesOfClass).minus(meanSampleMatrix)).times(Math.sqrt((double) samplesOfClass.size() / numberOfSamples)).getColumnPackedCopy();
Upsilon.setMatrix(0, dimension - 1, c, c, new Matrix(column, column.length)); Upsilon.setMatrix(0, dimension - 1, c, c, new Matrix(column, column.length));
} }
SingularValueDecomposition svdChi = new SingularValueDecomposition(Chi); SingularValueDecomposition svdChi;
Matrix Omega = svdChi.getU(); Matrix Omega;
if (dimension < numberOfSamples) {
svdChi = new SingularValueDecomposition(Chi.transpose());
Omega = svdChi.getV().transpose();
} else {
svdChi = new SingularValueDecomposition(Chi);
Omega = svdChi.getU();
}
Matrix ThetaInverseSquareRoot = svdChi.getS(); Matrix ThetaInverseSquareRoot = svdChi.getS();
int dim = Math.min(ThetaInverseSquareRoot.getRowDimension(), ThetaInverseSquareRoot.getColumnDimension()); int dim = Math.min(ThetaInverseSquareRoot.getRowDimension(), ThetaInverseSquareRoot.getColumnDimension());
for (int d = 0; d < dim; d++) { for (int d = 0; d < dim; d++) {
......
...@@ -3,9 +3,9 @@ package algorithms; ...@@ -3,9 +3,9 @@ package algorithms;
import java.util.List; import java.util.List;
import objects.Template; import objects.Template;
public abstract class Clustering extends Retriever { public abstract class Clusterer extends Retriever {
public Clustering() { public Clusterer() {
} }
public abstract List<List<Template>> cluster(List<Template> templatesGallery); public abstract List<List<Template>> cluster(List<Template> templatesGallery);
......
...@@ -4,17 +4,17 @@ import java.util.ArrayList; ...@@ -4,17 +4,17 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Template; import objects.Template;
public class ClusteringAgglomerativeHierarchical extends Clustering { public class ClustererAgglomerativeHierarchical extends Clusterer {
private final int k; private final int k;
private final double d; private final double d;
public ClusteringAgglomerativeHierarchical(int k) { public ClustererAgglomerativeHierarchical(int k) {
this.k = k; this.k = k;
this.d = Double.MAX_VALUE; this.d = Double.MAX_VALUE;
} }
public ClusteringAgglomerativeHierarchical(double d) { public ClustererAgglomerativeHierarchical(double d) {
this.k = Integer.MAX_VALUE; this.k = Integer.MAX_VALUE;
this.d = d; this.d = d;
} }
......
...@@ -5,11 +5,11 @@ import java.util.List; ...@@ -5,11 +5,11 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import objects.Template; import objects.Template;
public class ClusteringKmeans extends Clustering { public class ClustererKmeans extends Clusterer {
private final int k; private final int k;
public ClusteringKmeans(int k) { public ClustererKmeans(int k) {
this.k = k; this.k = k;
} }
......
...@@ -7,9 +7,6 @@ public abstract class Decision extends Retriever { ...@@ -7,9 +7,6 @@ public abstract class Decision extends Retriever {
private List gallery; private List gallery;
public Decision() {
}
public List getGallery() { public List getGallery() {
return gallery; return gallery;
} }
......
package algorithms; package algorithms;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import objects.Template; import objects.Template;
...@@ -14,16 +13,12 @@ public class DecisionRandom extends Decision { ...@@ -14,16 +13,12 @@ public class DecisionRandom extends Decision {
@Override @Override
public void importGallery(List<Template> templatesGallery) { public void importGallery(List<Template> templatesGallery) {
List<String> gallery = new ArrayList(); setGallery(templatesGallery);
for (Template template : templatesGallery) {
gallery.add(template.getSubject());
}
setGallery(gallery);
} }
@Override @Override
public String decide(Template templateProbe) { public String decide(Template templateProbe) {
List<String> gallery = getGallery(); List<Template> gallery = getGallery();
return gallery.get(new Random().nextInt(gallery.size())); return gallery.get(new Random().nextInt(gallery.size())).getSubject();
} }
} }
package algorithms;
import java.util.List;
import libsvm.svm;
import libsvm.svm_model;
import libsvm.svm_node;
import libsvm.svm_parameter;
import libsvm.svm_problem;
import objects.Template;
public class DecisionSVM extends Decision {
@Override
public String getDescription() {
return "SVM";
}
@Override
public void importGallery(List<Template> templatesGallery) {
setGallery(templatesGallery);
}
@Override
public String decide(Template templateProbe) {
svm svm = new svm();
svm_model svm_model = new svm_model();
svm_problem svm_problem = new svm_problem();
return "";
}
double[][] train = new double[1000][];
double[][] test = new double[10][];
private svm_model svmTrain() {
svm_problem prob = new svm_problem();
int dataCount = train.length;
prob.y = new double[dataCount];
prob.l = dataCount;
prob.x = new svm_node[dataCount][];
for (int i = 0; i < dataCount; i++) {
double[] features = train[i];
prob.x[i] = new svm_node[features.length - 1];
for (int j = 1; j < features.length; j++) {
svm_node node = new svm_node();
node.index = j;
node.value = features[j];
prob.x[i][j - 1] = node;
}
prob.y[i] = features[0];
}
svm_parameter param = new svm_parameter();
param.probability = 1;
param.gamma = 0.5;
param.nu = 0.5;
param.C = 1;
param.svm_type = svm_parameter.C_SVC;
param.kernel_type = svm_parameter.LINEAR;
param.cache_size = 20000;
param.eps = 0.001;
svm_model model = svm.svm_train(prob, param);
return model;
}
}
package algorithms; package algorithms;
import Jama.Matrix;
import java.io.Serializable; import java.io.Serializable;
import objects.Template; import objects.Template;
public abstract class DistanceTemplates implements Serializable { public abstract class DistanceTemplates implements Serializable {
private Matrix distanceTemplatesMatrix;
public DistanceTemplates() {
}
public Matrix getDistanceTemplatesMatrix() {
return distanceTemplatesMatrix;
}
public void setDistanceTemplatesMatrix(Matrix distanceTemplatesMatrix) {
this.distanceTemplatesMatrix = distanceTemplatesMatrix;
}
public abstract String getDescription(); public abstract String getDescription();
public abstract double getDistance(Template template1, Template template2); public abstract double getDistance(Template template1, Template template2);
......
...@@ -5,9 +5,15 @@ import objects.Template; ...@@ -5,9 +5,15 @@ import objects.Template;
public final class DistanceTemplatesMahalanobis extends DistanceTemplates { public final class DistanceTemplatesMahalanobis extends DistanceTemplates {
private Matrix totalScatterMatrix;
public DistanceTemplatesMahalanobis() { public DistanceTemplatesMahalanobis() {
} }
public void setTotalScatterMatrix(Matrix totalScatterMatrix) {
this.totalScatterMatrix = totalScatterMatrix;
}
@Override @Override
public String getDescription() { public String getDescription() {
return "Mahalanobis"; return "Mahalanobis";
...@@ -16,6 +22,6 @@ public final class DistanceTemplatesMahalanobis extends DistanceTemplates { ...@@ -16,6 +22,6 @@ public final class DistanceTemplatesMahalanobis extends DistanceTemplates {
@Override @Override
public double getDistance(Template template1, Template template2) { public double getDistance(Template template1, Template template2) {
Matrix diff = template1.getMatrix().minus(template2.getMatrix()); Matrix diff = template1.getMatrix().minus(template2.getMatrix());
return Math.sqrt(diff.transpose().times(getDistanceTemplatesMatrix()).times(diff).get(0, 0)); return Math.sqrt(diff.transpose().times(totalScatterMatrix).times(diff).get(0, 0));
} }
} }
package algorithms;
import Jama.EigenvalueDecomposition;
import Jama.Matrix;
import objects.Template;
public final class DistanceTemplatesNareshKumarMS extends DistanceTemplates {
private Matrix meanMatrix;
public DistanceTemplatesNareshKumarMS() {
}
public void setMeanMatrix(Matrix meanMatrix) {
this.meanMatrix = meanMatrix;
}
@Override
public String getDescription() {
return "NareshKumarMS";
}
@Override
public double getDistance(Template template1, Template template2) {
double sum = 0.0;
double[] generalizedEigenvalues = new EigenvalueDecomposition(getCovarianceMatrix(template2).inverse().times(getCovarianceMatrix(template1))).getRealEigenvalues();
for (int l = 0; l < generalizedEigenvalues.length; l++) {
sum += Math.pow(Math.log(Math.abs(generalizedEigenvalues[l])), 2);
}
return Math.sqrt(sum);
}
private Matrix getCovarianceMatrix(Template template) {
Matrix matrix = template.getMatrix();
int rows = matrix.getRowDimension();
int columns = matrix.getColumnDimension();
Matrix covarianceMatrix = new Matrix(columns, columns);
for (int r = 0; r < rows; r++) {
Matrix d = matrix.getMatrix(r, r, 0, columns - 1);
Matrix u = meanMatrix.getMatrix(r, r, 0, columns - 1);
Matrix diff = d.minus(u);
covarianceMatrix.plusEquals((diff.transpose().times(diff)).times((double) 1 / (rows - 1)));
}
return covarianceMatrix;
}
}
package methods; package algorithms;
import Jama.Matrix; import Jama.Matrix;
import algorithms.Classifier; import executor.MotionLoader;
import algorithms.MotionLoader;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.FileWriter; import java.io.FileWriter;
......
package methods; package algorithms;
import algorithms.Classifier; import executor.MotionLoaderJointCoordinates;
import algorithms.MotionLoaderJointCoordinates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Feature; import objects.Feature;
......
package methods; package algorithms;
import algorithms.Classifier; import executor.MotionLoaderJointCoordinates;
import algorithms.MotionLoaderJointCoordinates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Axis; import objects.Axis;
......
package methods; package algorithms;
import algorithms.Classifier; import executor.MotionLoaderJointCoordinates;
import algorithms.MotionLoaderJointCoordinates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Feature; import objects.Feature;
......
package methods; package algorithms;
import algorithms.Classifier; import executor.MotionLoaderJointCoordinates;
import algorithms.MotionLoaderJointCoordinates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Axis; import objects.Axis;
......
package methods; package algorithms;
import algorithms.Classifier; import executor.MotionLoaderJointCoordinates;
import algorithms.MotionLoaderJointCoordinates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Axis; import objects.Axis;
......
package methods; package algorithms;
import algorithms.Classifier; import executor.MotionLoaderJointCoordinates;
import algorithms.MotionLoaderJointCoordinates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Axis; import objects.Axis;
......
package methods; package algorithms;
import algorithms.Classifier; import executor.MotionLoaderJointCoordinates;
import algorithms.MotionLoaderJointCoordinates;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import objects.Axis; import objects.Axis;
import objects.Feature; import objects.Feature;
import objects.Motion; import objects.Motion;
import objects.MotionJointCoordinates; import objects.MotionJointCoordinates;
import objects.Sample;
public class MethodJiangS extends Method { public class MethodJiangS extends Method {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment