Remove unused KMeans clustering (half broken implementation anyway)
This commit is contained in:
parent
a4f10c8b71
commit
74e5dbd532
@ -1,33 +0,0 @@
|
||||
package eva2.tools;
|
||||
|
||||
/**
|
||||
* This class represents a cluster object in the R^N.
|
||||
*/
|
||||
public class Cluster {
|
||||
/**
|
||||
* Number of samples in the cluster.
|
||||
*/
|
||||
public int samplesInCluster;
|
||||
/**
|
||||
* Center of the cluster.
|
||||
*/
|
||||
public double[] center;
|
||||
/**
|
||||
* nearest sample (double[]) to the center of the cluster.
|
||||
*/
|
||||
public double[] nearestSample;
|
||||
|
||||
/**
|
||||
* This class represents a cluster of
|
||||
* sample points.
|
||||
*
|
||||
* @param center center
|
||||
* @param SamplesInCluster Number of samples in cluster
|
||||
* @param nearestSample Nearest sample to cluster center.
|
||||
*/
|
||||
public Cluster(double[] center, int SamplesInCluster, double[] nearestSample) {
|
||||
samplesInCluster = SamplesInCluster;
|
||||
this.center = center;
|
||||
this.nearestSample = nearestSample;
|
||||
}
|
||||
}
|
@ -1,154 +0,0 @@
|
||||
package eva2.tools;
|
||||
|
||||
import eva2.tools.math.RNG;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class KMEANSJAVA {
|
||||
protected double[][] c;
|
||||
protected int[] indices;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public double[][] getC() {
|
||||
return c;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public int[] getIDX() {
|
||||
return indices;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private double dist(double[] x1, double[] x2) {
|
||||
double ret = 0;
|
||||
for (int i = 0; i < x1.length; i++) {
|
||||
ret += (x1[i] - x2[i]) * (x1[i] - x2[i]);
|
||||
}
|
||||
return Math.sqrt(ret);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public KMEANSJAVA(double[][] samples, int K, int iterations) {
|
||||
if (K > samples.length) {
|
||||
K = samples.length;
|
||||
}
|
||||
int counter = 0;
|
||||
c = new double[K][];
|
||||
for (int i = 0; i < K; i++) {
|
||||
c[i] = samples[i].clone();
|
||||
}
|
||||
indices = new int[samples.length];
|
||||
while (counter++ < iterations) {
|
||||
// determine indices start
|
||||
for (int i = 0; i < indices.length; i++) {
|
||||
int index_nc = 0; // index of nearest cluster
|
||||
double mindist = 999999999;
|
||||
for (int j = 0; j < c.length; j++) {
|
||||
if (mindist > dist(samples[i], c[j])) {
|
||||
mindist = dist(samples[i], c[j]);
|
||||
index_nc = j;
|
||||
}
|
||||
}
|
||||
indices[i] = index_nc;
|
||||
}
|
||||
// determine indices end !
|
||||
// determine the new centers
|
||||
for (int indexofc = 0; indexofc < c.length; indexofc++) {
|
||||
double[] newcenter = new double[samples[0].length];
|
||||
int treffer = 0;
|
||||
for (int indice : indices) { //System.out.println("j="+j);
|
||||
if (indice == indexofc) {
|
||||
treffer++;
|
||||
for (int d = 0; d < newcenter.length; d++) {
|
||||
newcenter[d] += c[indice][d];
|
||||
//newcenter[d] = newcenter[d] + samples[j][d];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int d = 0; d < newcenter.length; d++) {
|
||||
newcenter[d] /= treffer;
|
||||
}
|
||||
c[indexofc] = newcenter;
|
||||
}
|
||||
// determine the new centers
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Just a test function.
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
int k = 3;
|
||||
int samples = 10;
|
||||
int d = 2;
|
||||
double[][] test = new double[samples][d];
|
||||
for (int i = 0; i < samples; i++) {
|
||||
for (int j = 0; j < d; j++) {
|
||||
test[i][j] = RNG.randomDouble(0, 10);
|
||||
}
|
||||
}
|
||||
KMEANSJAVA app = new KMEANSJAVA(test, k, 5);
|
||||
double[][] c = app.getC();
|
||||
int[] idx = app.getIDX();
|
||||
System.out.println("c");
|
||||
for (int i = 0; i < c.length; i++) {
|
||||
for (int j = 0; j < c[i].length; j++) {
|
||||
System.out.print(c[i][j] + " ");
|
||||
}
|
||||
System.out.println("");
|
||||
}
|
||||
System.out.println("test");
|
||||
for (double[] aTest : test) {
|
||||
for (int j = 0; j < aTest.length; j++) {
|
||||
System.out.print(aTest[j] + " ");
|
||||
}
|
||||
System.out.println("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class ClusterComp implements Comparator {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public ClusterComp() {
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public int compare(Object p1, Object p2) {
|
||||
int x1 = ((Cluster) p1).samplesInCluster;
|
||||
int x2 = ((Cluster) p2).samplesInCluster;
|
||||
if (x1 > x2) {
|
||||
return -1;
|
||||
}
|
||||
if (x1 <= x2) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object x) {
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user