Package trust.weka4jason

Source Code of trust.weka4jason.WekaDataset

package trust.weka4jason;

import java.util.ArrayList;
import java.util.List;

import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.Instance;
import weka.core.Instances;

/**
* This class manages the dataset for the weka
* classifier and the bridge with the Jason beliefs base
* @author pc
*
*/
public class WekaDataset implements Cloneable{

  Instances dataset;
 
  /**
   * Create the structure of the dataset.
   * The attributes order is:
   * <ol>
   *   <li> Task </li>
   *   <li> Ability </li>
   *   <li> Disposition </li>
   *   <li> Cross </li>
   *   <li> Score </li>
   * </ol>
   */
 
  @SuppressWarnings("unchecked")
  public WekaDataset(){
    /* Structure */
        Attribute task = new Attribute("Task", (List) null);
        Attribute ability = new Attribute("Ability", (List) null);
        Attribute disposition = new Attribute("Disposition", (List) null);
        Attribute cross = new Attribute("Cross", (List) null);
        Attribute context = new Attribute("ExtFactors");
        Attribute score = new Attribute("score");
        ArrayList<Attribute> attributes = new ArrayList<Attribute>();
    attributes.add(task);
    attributes.add(ability);
    attributes.add(disposition);
    attributes.add(cross);
    attributes.add(context);
    attributes.add(score);
   
    // last arg is the max entry set
    dataset = new Instances("BeliefBase", attributes, 755);
   
  }
 
  /**
   * Incrementally add a new instance to the dataset.
   * @param index  index where to add the new entry.
   * @param list  list of attribute values of this entry.
   */
  public void addInstance(int index, Object ... list){
    int size = dataset.size();
 
    if(index>size){
     
      //System.out.println("** Inserting entry "+ list[0]+" "+list[1]+" "+list[2]+" "+list[3]+" "+list[4]+" "+list[5]);
     
      if(isNominalDataset())
        stringFilter();
     
      dataset.add(newInstance(list));
    }
   
  }
 
  private boolean isNominalDataset() {
    for(int i=0; i<dataset.numAttributes(); i++)
      if(dataset.attribute(i).isNominal())
        return true;
    return false;
  }

  /**
   * Set current dataset
   * @param data
   */
  public void setDataset(Instances data){
    dataset = data;
  }
 
  /**
   * Return current dataset
   * @return
   */
  public Instances getDataset(){
    return dataset;
  }
 

 
  /**
   * Translate string into nominal attributes.
   */
  public void nominalFilter(){
    dataset =  WekaUtils.fromStringToNominal(dataset, 1,2,3,4);
  }
 
  /**
   * Translate string into nominal attributes.
   */
  public void stringFilter(){
    dataset =  WekaUtils.fromNominalToString(dataset, 1,2,3,4);
  }
 
  /**
   * Generate a new Instance entry shaped on the current string dataset structure
   * @param list  list of attribute values of this entry
   * @return
   */
  public Instance newInstance(Object ...list){
    Instance newInstance = new DenseInstance(dataset.numAttributes());
   
    Attribute att;
    for(int i=0; i<list.length; i++){
      att = dataset.attribute(i);
         String listval = list[i].toString();

        //System.out.println(" ATTR. " + att + " VAL. " + listval);
         if(att.isNumeric()){
           try
             double dval = Double.parseDouble(listval);
             newInstance.setValue(att, dval );
           }catch(Exception ex){  }
         }
         else{
           try{
             newInstance.setValue(att, list[i].toString() );
           }catch(Exception e){
             e.printStackTrace();
          
         }
    }
    //System.out.println(newInstance);
    return newInstance;
  }
 
  /**
   * Generate a new Instance entry shaped on the current nominal dataset structure
   * It also checks whether the instance is compliant with the nominal structure
   * @param list  list of attribute values of this entry
   * @return
   */
  public Instance createNominalInstance(Object ...list){
   
   
    Instance newInstance = new DenseInstance(dataset.numAttributes());
   
    Attribute att;
    for(int i=0; i<list.length; i++){
      att = dataset.attribute(i);
         String listval = list[i].toString();
         //System.out.println(listval);

        //System.out.println(" ATTR. " + att + " VAL. " + listval);
         if(att.isNumeric()){
           try
             double dval = Double.parseDouble(listval);
             newInstance.setValue(att, dval );
           }catch(Exception ex){ 
             ex.printStackTrace();
           }
         }
         else{
           //att is nominal
           if(att.isNominal() && att.indexOfValue(listval)<0)
             return null//instance not compliant
          
          
           try{
             newInstance.setValue(att, list[i].toString() );
           }catch(Exception e){
             e.printStackTrace();
          
         }
    }
   
   
    newInstance.setDataset(dataset);
    //System.out.println("new instance "+newInstance);
    //System.out.println("dataset class index "+dataset.classIndex() + " "+dataset.classAttribute());

    //System.out.println("instance class index "+newInstance.classIndex() + " "+newInstance.classAttribute());

   
    return newInstance;
  }
 
  public Object clone(){
    WekaDataset copy = new WekaDataset();
    copy.dataset = new Instances(this.dataset);
    return copy;
  }
 
 
 
 
 
}
TOP

Related Classes of trust.weka4jason.WekaDataset

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.