Package JKernelMachines.fr.lip6.kernel

Source Code of JKernelMachines.fr.lip6.kernel.IndexedCacheKernelFactory

package JKernelMachines.fr.lip6.kernel;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import JKernelMachines.fr.lip6.kernel.adaptative.ThreadedSumKernel;
import JKernelMachines.fr.lip6.kernel.extra.bag.SimpleSubListKernel;
import JKernelMachines.fr.lip6.kernel.typed.DoubleGaussChi2;

public class IndexedCacheKernelFactory {

  public static double gamma = 1.0;

  public static IndexedCacheKernel<String, ArrayList<double[]>> createIndexCacheKernel(ArrayList<String> files, ArrayList<ArrayList<double[]>> bow,  boolean bComptuteMeanDist){

    IndexedCacheKernel<String, ArrayList<double[]>> icachekernel = null;
    if (files.size() != bow.size()){
      System.err.println("Bow and files of different size !!!! STOPING ...");
      return null;
    }

    DoubleGaussChi2 gaussKernel = new DoubleGaussChi2(gamma);
    double distmean = 0.0;

    if (bComptuteMeanDist){
      int cpt = 0;
      for (int i=0; i < files.size(); i++ ){
        for (int j = i + 1; j < files.size(); j++ ){
          distmean += gaussKernel.distChi2(bow.get(i).get(0), bow.get(j).get(0));
          cpt++;
        }
      }
      distmean = distmean / ((double)cpt);
      if (distmean < Double.MIN_VALUE)
        System.err.println("distmean = " + distmean + " to small - pathological signatures !!!!!! STOPING ...");

      gamma = 1/distmean;
      gaussKernel.setGamma(gamma);

      System.out.println("distmean = " + distmean + " gamma = " + gamma);
    }

    ThreadedSumKernel<ArrayList<double[]>> tsk = new ThreadedSumKernel<ArrayList<double[]>>();

    SimpleSubListKernel<double[], ArrayList<double[]>> slk = new SimpleSubListKernel<double[], ArrayList<double[]>>(0, 1, gaussKernel);
    tsk.addKernel(slk, 1.0);

    Map<String , ArrayList<double[]> > map = new HashMap<String,ArrayList<double[]>>();
    for (int i = 0; i < files.size(); i++){
      map.put(files.get(i), bow.get(i));
    }
    icachekernel = new IndexedCacheKernel<String,ArrayList<double[]>>(tsk,map);

    return icachekernel;


  }

}
TOP

Related Classes of JKernelMachines.fr.lip6.kernel.IndexedCacheKernelFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.