package edu.cmu.minorthird.classify.experiments; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import edu.cmu.minorthird.classify.Splitter; /** Split into one train, one test partition. * Ignores subpopulation information. * * @author William Cohen */ public class SimpleRandomSplitter<T> implements Splitter<T>{ private Random random; private double trainFraction; private List<T> trainList=null,testList=null; public SimpleRandomSplitter(Random random,double trainFraction){ this.random=random; this.trainFraction=trainFraction; } public SimpleRandomSplitter(double trainFraction){ this(new Random(),trainFraction); } public SimpleRandomSplitter(){ this(0.7); } @Override public void split(Iterator<T> i){ trainList=new ArrayList<T>(); testList=new ArrayList<T>(); while(i.hasNext()){ T t=i.next(); if(random.nextDouble()<=trainFraction) trainList.add(t); else testList.add(t); } } @Override public int getNumPartitions(){ return 1; } @Override public Iterator<T> getTrain(int k){ return trainList.iterator(); } @Override public Iterator<T> getTest(int k){ return testList.iterator(); } }