blob: 4018d97b3b605d4f9c5eba91b6d70780b4d1a755 [file] [log] [blame]
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.apache.samoa.instances;
/*
* #%L
* SAMOA
* %%
* Copyright (C) 2014 - 2015 Apache Software Foundation
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
/**
*
* @author abifet
*/
// public int[] m_AttValues; // for DataPoint
public class SingleLabelInstance implements Instance {
protected double weight;
protected InstanceData instanceData;
protected InstanceData classData;
// Fast implementation without using Objects
// protected double[] attributeValues;
// protected double classValue;
protected InstancesHeader instanceInformation;
public SingleLabelInstance() {
// necessary for kryo serializer
}
public SingleLabelInstance(SingleLabelInstance inst) {
this.weight = inst.weight;
this.instanceData = inst.instanceData; // copy
this.classData = inst.classData; // copy
// this.classValue = inst.classValue;
// this.attributeValues = inst.attributeValues;
this.instanceInformation = inst.instanceInformation;
}
// Dense
public SingleLabelInstance(double weight, double[] res) {
this.weight = weight;
this.instanceData = new DenseInstanceData(res);
// this.attributeValues = res;
this.classData = new SingleClassInstanceData();
// this.classValue = Double.NaN;
}
// Sparse
public SingleLabelInstance(double weight, double[] attributeValues,
int[] indexValues, int numberAttributes) {
this.weight = weight;
this.instanceData = new SparseInstanceData(attributeValues,
indexValues, numberAttributes); // ???
this.classData = new SingleClassInstanceData();
// this.classValue = Double.NaN;
// this.instanceInformation = new InstancesHeader();
}
public SingleLabelInstance(double weight, InstanceData instanceData) {
this.weight = weight;
this.instanceData = instanceData; // ???
// this.classValue = Double.NaN;
this.classData = new SingleClassInstanceData();
// this.instanceInformation = new InstancesHeader();
}
public SingleLabelInstance(int numAttributes) {
this.instanceData = new DenseInstanceData(new double[numAttributes]);
// m_AttValues = new double[numAttributes];
/*
* for (int i = 0; i < m_AttValues.length; i++) { m_AttValues[i] =
* Utils.missingValue(); }
*/
this.weight = 1;
this.classData = new SingleClassInstanceData();
this.instanceInformation = new InstancesHeader();
}
@Override
public double weight() {
return weight;
}
@Override
public void setWeight(double weight) {
this.weight = weight;
}
@Override
public Attribute attribute(int instAttIndex) {
return this.instanceInformation.attribute(instAttIndex);
}
@Override
public void deleteAttributeAt(int i) {
// throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void insertAttributeAt(int i) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int numAttributes() {
return this.instanceInformation.numAttributes();
}
@Override
public double value(int instAttIndex) {
return // attributeValues[instAttIndex]; //
this.instanceData.value(instAttIndex);
}
@Override
public boolean isMissing(int instAttIndex) {
return // Double.isNaN(value(instAttIndex)); //
this.instanceData.isMissing(instAttIndex);
}
@Override
public int numValues() {
return // this.attributeValues.length; //
this.instanceData.numValues();
}
@Override
public int index(int i) {
return // i; //
this.instanceData.index(i);
}
@Override
public double valueSparse(int i) {
return this.instanceData.valueSparse(i);
}
@Override
public boolean isMissingSparse(int p) {
return this.instanceData.isMissingSparse(p);
}
@Override
public double value(Attribute attribute) {
// throw new UnsupportedOperationException("Not yet implemented");
// //Predicates.java
return value(attribute.index());
}
@Override
public String stringValue(int i) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public double[] toDoubleArray() {
return // this.attributeValues; //
this.instanceData.toDoubleArray();
}
@Override
public void setValue(int numAttribute, double d) {
this.instanceData.setValue(numAttribute, d);
// this.attributeValues[numAttribute] = d;
}
@Override
public double classValue() {
return this.classData.value(0);
// return classValue;
}
@Override
public int classIndex() {
return instanceInformation.classIndex();
}
@Override
public int numClasses() {
return this.instanceInformation.numClasses();
}
@Override
public boolean classIsMissing() {
return // Double.isNaN(this.classValue);//
this.classData.isMissing(0);
}
@Override
public Attribute classAttribute() {
return this.instanceInformation.attribute(0);
}
@Override
public void setClassValue(double d) {
this.classData.setValue(0, d);
// this.classValue = d;
}
@Override
public Instance copy() {
SingleLabelInstance inst = new SingleLabelInstance(this);
return inst;
}
@Override
public Instances dataset() {
return this.instanceInformation;
}
@Override
public void setDataset(Instances dataset) {
this.instanceInformation = new InstancesHeader(dataset);
}
public void addSparseValues(int[] indexValues, double[] attributeValues,
int numberAttributes) {
this.instanceData = new SparseInstanceData(attributeValues,
indexValues, numberAttributes); // ???
}
@Override
public String toString() {
StringBuffer text = new StringBuffer();
for (int i = 0; i < this.numValues(); i++) {
if (i > 0)
text.append(",");
text.append(this.value(i));
}
text.append(",").append(this.weight());
return text.toString();
}
}