📄 xvalidation.java
字号:
/* * YALE - Yet Another Learning Environment * Copyright (C) 2002, 2003 * Simon Fischer, Ralf Klinkenberg, Ingo Mierswa, * Katharina Morik, Oliver Ritthoff * Artificial Intelligence Unit * Computer Science Department * University of Dortmund * 44221 Dortmund, Germany * email: yale@ls8.cs.uni-dortmund.de * web: http://yale.cs.uni-dortmund.de/ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. */package edu.udo.cs.yale.operator;import edu.udo.cs.yale.operator.OperatorException;import edu.udo.cs.yale.operator.parameter.*;import edu.udo.cs.yale.example.ExampleSet;import edu.udo.cs.yale.example.SplittedExampleSet;import edu.udo.cs.yale.example.Example;import edu.udo.cs.yale.example.ExampleReader;import edu.udo.cs.yale.operator.performance.*;import edu.udo.cs.yale.tools.*;import java.util.List;/** <code>XValidation</code> encapsulates a cross-validation experiment. The * example set {@yale.math S} is split up into <var> number_of_validations</var> subsets * {@yale.math S_i}. The inner operators are applied <var>number_of_validations</var> * times using {@yale.math S_i} as the test set (input of the second inner operator) and * {@yale.math S\backslash S_i} training set (input of the first inner operator). * * The first inner operator must accept an * {@link edu.udo.cs.yale.example.ExampleSet} while the second must accept an * {@link edu.udo.cs.yale.example.ExampleSet} and the output of the first (which is * in most cases a {@link edu.udo.cs.yale.operator.learner.Model}) and must produce * a {@link edu.udo.cs.yale.operator.performance.PerformanceVector}. * * @yale.index cross-validation * @yale.xmlclass XValidation * @author Ingo, Ralf * @version $Id: XValidation.java,v 2.11 2003/07/09 15:19:58 fischer Exp $ */public class XValidation extends ValidationChain { private int number, iteration; public XValidation() { addValue(new Value("iteration", "The number of the current iteration.") { public double getValue() { return iteration; } }); } public int getNumberOfValidationSteps() { return number; } public IOObject[] apply() throws OperatorException { ExampleSet inputSet = (ExampleSet)getInput(ExampleSet.class); if (getParameterAsBoolean("leave_one_out")) { number = inputSet.getSize(); } else { number = getParameterAsInt("number_of_validations"); } LogService.logMessage(getName() + ": Starting "+number+"-fold cross validation", LogService.TASK); PerformanceVector performanceVector = null; // Split training / test set SplittedExampleSet splittedES = new SplittedExampleSet(inputSet, number); // start crossvalidation for (iteration = 0; iteration < number; iteration++) { splittedES.selectAllSubsetsBut(iteration); learn(splittedES); splittedES.selectSingleSubset(iteration); IOContainer evalOutput = evaluate(splittedES); PerformanceVector iterationPerformance = (PerformanceVector)evalOutput.getInput(PerformanceVector.class); if (performanceVector == null) { performanceVector = iterationPerformance; } else { for (int i = 0; i < performanceVector.size(); i++) { performanceVector.get(i).buildAverage(iterationPerformance.get(i)); } } setLastPerformance(iterationPerformance.getMainCriterion()); inApplyLoop(); } // end crossvalidation setResult(performanceVector.getMainCriterion()); return new IOObject[] { performanceVector }; } public List getParameterTypes() { List types = super.getParameterTypes(); types.add(new ParameterTypeInt("number_of_validations", "Number of subsets for the crossvalidation.", 2, Integer.MAX_VALUE, 10)); types.add(new ParameterTypeBoolean("leave_one_out", "Set the number of validations to the number of examples. If set to true, number_of_validations is ignored.", false)); return types; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -