/**
*
*/
package org.streaminer.stream.classifier;
import org.streaminer.stream.learner.LearnerUtils;
import org.streaminer.stream.data.Data;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
/**
* <p>
* This classifier predicts a random class.
* </p>
*
* @author Christian Bockermann <chris@jwall.org>
*
*/
public class RandomClassifier extends AbstractClassifier<Data, String> {
/** The unique class ID */
private static final long serialVersionUID = 3687537399872562759L;
Random rnd = new Random();
/* The label attribute to learn from */
String labelAttribute = null;
/* The classes from which to choose one for prediction */
List<String> classes = new LinkedList<String>();
/**
* @return the labelAttribute
*/
public String getLabelAttribute() {
return labelAttribute;
}
/**
* @param labelAttribute the labelAttribute to set
*/
public void setLabelAttribute(String labelAttribute) {
this.labelAttribute = labelAttribute;
}
/**
* @see stream.learner.AbstractClassifier#learn(java.lang.Object)
*/
@Override
public void learn(Data item) {
if( labelAttribute == null )
labelAttribute = LearnerUtils.detectLabelAttribute( item );
String clazz = "" + item.get( labelAttribute );
if( !classes.contains( clazz ) )
classes.add( clazz );
}
/**
* @see stream.learner.AbstractClassifier#predict(java.lang.Object)
*/
@Override
public String predict(Data item) {
if( classes.isEmpty() )
return "null";
int random = Math.abs( rnd.nextInt() );
return classes.get( random % classes.size() );
}
}