package quickml; import com.google.common.collect.Sets; import quickml.data.AttributesMap; import quickml.data.instances.Instance; import quickml.data.NegativeWeightsFilter; import java.io.Serializable; import java.util.HashMap; import java.util.Map; public class TrainingInstance implements Instance<AttributesMap, Serializable> { private HashMap<String, Serializable> attributes; private AttributesMap attributesMap; private Double label; private double weight; private long auctionId; public TrainingInstance(long auctionId, HashMap<String, Serializable> attributes, Double classification, double weight) { this.auctionId = auctionId; this.attributes = attributes; this.label = classification; this.weight = weight; } public TrainingInstance() { } @Override public AttributesMap getAttributes() { return attributesMap; } //TODO problems deserializing public void convertAttributes() { attributesMap = new AttributesMap(); for (Map.Entry<String, Serializable> entry : attributes.entrySet()) { attributesMap.put(entry.getKey(), (Serializable) entry.getValue()); } } public Double getLabel() { return label; } public double getWeight() { return weight; } public TrainingInstance reweight(final double newWeight) { return new TrainingInstance(auctionId, attributes, label, newWeight); } public boolean isClick() { return label == 1.0D; } public long getAuctionId() { return auctionId; } public static void main(String[] args) { TrainingInstance trainingInstance = new TrainingInstance(); Iterable<TrainingInstance> trainingInstances = Sets.newHashSet(trainingInstance); NegativeWeightsFilter.filterNegativeWeights(trainingInstances); } }