/**
 * Copyright (C) 2013-2017 Vasilis Vryniotis 
 *
 * 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.
 */
package com.datumbox.framework.core.machinelearning.modelselection;

import com.datumbox.framework.common.Configuration;
import com.datumbox.framework.core.common.dataobjects.Dataframe;
import com.datumbox.framework.core.machinelearning.MLBuilder;
import com.datumbox.framework.core.machinelearning.common.abstracts.modelers.AbstractModeler;
import com.datumbox.framework.core.machinelearning.common.abstracts.modelselection.AbstractSplitter.Split;
import com.datumbox.framework.core.machinelearning.common.interfaces.TrainingParameters;
import com.datumbox.framework.core.machinelearning.common.interfaces.ValidationMetrics;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * Estimates the validation metrics of a specific model.
 *
 * @author Vasilis Vryniotis 
 * @param 
 */
public class Validator {

    private final Class vmClass;
    private final Configuration configuration;

    /**
     * The constructor of the K-Fold cross validator.
     *
     * @param vmClass
     */
    public Validator(Class vmClass, Configuration configuration) {
        this.vmClass = vmClass;
        this.configuration = configuration;
    }

    /**
     * Estimates the average validation metrics on the provided data splits.
     *
     * @param dataSplits
     * @param trainingParameters
     * @return
     */
    public VM validate(Iterator dataSplits, TrainingParameters trainingParameters) {
        AbstractModeler modeler = MLBuilder.create(trainingParameters, configuration);

        List validationMetricsList = new LinkedList<>();
        while (dataSplits.hasNext()) {
            Split s = dataSplits.next();
            Dataframe trainData = s.getTrain();
            Dataframe testData = s.getTest();

            modeler.fit(trainData);
            trainData.close();

            modeler.predict(testData);
            VM entrySample = ValidationMetrics.newInstance(vmClass, testData);
            testData.close();

            validationMetricsList.add(entrySample);
        }
        modeler.close();

        VM avgValidationMetrics = ValidationMetrics.newInstance(vmClass, validationMetricsList);

        return avgValidationMetrics;
    }
}

 

Ads help maintain this website.