All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.enterprisemath.math.nn.SupervisedTrainingRecord Maven / Gradle / Ivy

The newest version!
package com.enterprisemath.math.nn;

import com.enterprisemath.utils.DomainUtils;
import com.enterprisemath.utils.ValidationUtils;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;

/**
 * Definition of the training record for supervised learning.
 *
 * @author radek.hecl
 */
public class SupervisedTrainingRecord {

    /**
     * Builder object.
     */
    public static class Builder {

        /**
         * Inputs.
         */
        private Map inputs = new HashMap();

        /**
         * Desired outputs.
         */
        private Map outputs = new HashMap();

        /**
         * Sets inputs.
         *
         * @param inputs inputs
         * @return this instance
         */
        public Builder setInputs(Map inputs) {
            this.inputs = DomainUtils.softCopyMap(inputs);
            return this;
        }

        /**
         * Adds input.
         *
         * @param key key
         * @param value value
         * @return this instance
         */
        public Builder addInput(String key, double value) {
            inputs.put(key, value);
            return this;
        }

        /**
         * Sets outputs.
         *
         * @param outputs outputs
         * @return this instance
         */
        public Builder setOutputs(Map outputs) {
            this.outputs = DomainUtils.softCopyMap(outputs);
            return this;
        }

        /**
         * Adds output.
         *
         * @param key key
         * @param value value
         * @return this instance
         */
        public Builder addOutput(String key, double value) {
            outputs.put(key, value);
            return this;
        }

        /**
         * Builds the result object.
         *
         * @return created object
         */
        public SupervisedTrainingRecord build() {
            return new SupervisedTrainingRecord(this);
        }
    }

    /**
     * Inputs.
     */
    private Map inputs;

    /**
     * Desired outputs.
     */
    private Map outputs;

    /**
     * Creates new instance.
     *
     * @param builder builder object
     */
    public SupervisedTrainingRecord(Builder builder) {
        inputs = DomainUtils.softCopyUnmodifiableMap(builder.inputs);
        outputs = DomainUtils.softCopyUnmodifiableMap(builder.outputs);
        guardInvariants();
    }

    /**
     * Guards this object to be consistent. Throws exception if this is not the case.
     */
    private void guardInvariants() {
        ValidationUtils.guardNotNullMap(inputs, "inputs cannot have null element");
        ValidationUtils.guardNotNullMap(outputs, "outputs cannot have null element");
    }

    /**
     * Returns inputs.
     *
     * @return inputs
     */
    public Map getInputs() {
        return inputs;
    }

    /**
     * Returns outputs.
     *
     * @return outputs
     */
    public Map getOutputs() {
        return outputs;
    }

    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }

    @Override
    public boolean equals(Object obj) {
        return EqualsBuilder.reflectionEquals(this, obj);
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

    /**
     * Shortcut to create new instance.
     *
     * @param data data
     * @param category
     * @return created object
     */
    /**
     * Creates new instance.
     *
     * @param inputs inputs
     * @param outputs desired outputs
     * @return created instance
     */
    public static SupervisedTrainingRecord create(Map inputs, Map outputs) {
        return new SupervisedTrainingRecord.Builder().
                setInputs(inputs).
                setOutputs(outputs).
                build();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy