/**
    This file is part of JkernelMachines.

    JkernelMachines is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    JkernelMachines is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with JkernelMachines.  If not, see <http://www.gnu.org/licenses/>.

    Copyright David Picard - 2010

 */
package fr.lip6.jkernelmachines.test.density;

import java.util.ArrayList;
import java.util.Random;

import fr.lip6.jkernelmachines.density.DoubleGaussianMixtureModel;
import fr.lip6.jkernelmachines.density.ParzenDensity;
import fr.lip6.jkernelmachines.density.SDCADensity;
import fr.lip6.jkernelmachines.density.SMODensity;
import fr.lip6.jkernelmachines.density.SimpleMKLDensity;
import fr.lip6.jkernelmachines.kernel.typed.DoubleGaussL2;
import fr.lip6.jkernelmachines.kernel.typed.index.IndexDoubleGaussL2;
import fr.lip6.jkernelmachines.util.DebugPrinter;

/**
 * Test cases of density estimators using generated data.
 * 
 * @author picard
 * 
 */
@Deprecated
public class TestDensity {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int dimension = 3;
		int nbPosTrain = 250;
		int nbPosTest = 25;

		Random ran = new Random(System.currentTimeMillis());

		ArrayList<double[]> train = new ArrayList<double[]>();
		// 1. generate positive train samples
		for (int i = 0; i < nbPosTrain; i++) {
			double[] t = new double[dimension];
			for (int x = 0; x < dimension; x++) {
				t[x] = ran.nextGaussian();
			}

			train.add(t);
		}
		System.out.println("Samples generated");

		// 3. train svm
		long time = System.currentTimeMillis();
		// Kernel<double[]> k = new DoubleLinear();
		DoubleGaussL2 k = new DoubleGaussL2();
		k.setGamma(2);
		SMODensity<double[]> svm = new SMODensity<double[]>(k);
		svm.setC(100);
		svm.train(train);
		long smotime = System.currentTimeMillis() - time;
		System.out.println("SMO done in " + smotime);

		ParzenDensity<double[]> parzen = new ParzenDensity<double[]>(k);
		parzen.train(train);

		SDCADensity<double[]> sdca = new SDCADensity<double[]>(k);
		sdca.setC(100);
		sdca.train(train);

		DoubleGaussianMixtureModel gmm = new DoubleGaussianMixtureModel(1);
		gmm.train(train);

		SimpleMKLDensity<double[]> mkl = new SimpleMKLDensity<double[]>();
		for (int x = 0; x < dimension; x++) {
			mkl.addKernel(new IndexDoubleGaussL2(x));
		}
		mkl.setC(100);
		mkl.train(train);

		ArrayList<double[]> test = new ArrayList<double[]>();
		// 4. generate positive test samples
		for (int i = 0; i < nbPosTest; i++) {
			double[] t = new double[dimension];
			for (int x = 0; x < dimension; x++) {
				t[x] = ran.nextGaussian();
			}

			test.add(t);
		}

		// 6. test svm
		for (double[] t : test) {
			double value = svm.valueOf(t);
			double pvalue = parzen.valueOf(t);
			double dvalue = sdca.valueOf(t);
			double gvalue = gmm.valueOf(t);
			double mvalue = mkl.valueOf(t);

			System.out.println("smo: " + value + ", parzen: "
					+ pvalue + ", sdca: " + dvalue + " , gmm: "
					+ gvalue + " , mkl: " + mvalue);

		}

		double[] alphas = svm.getAlphas();
		int nnz = 0;
		for (double d : alphas)
			if (d > 0)
				nnz++;

		System.out.println("Non zeros coefficients : " + nnz + " ("
				+ (nnz / (double) alphas.length) + ")");

	}

}

@@ -1255,58 +1255,8 @@
 sL2;
-%0Aimport fr.lip6.jkernelmachines.util.DebugPrinter;
 %0A%0A/*

remove useless import