/* * Copyright (c) 2010 Pentaho Corporation. All rights reserved. * This software was developed by Pentaho Corporation and is provided under the terms * of the GNU Lesser General Public License, Version 2.1. You may not use * this file except in compliance with the license. If you need a copy of the license, * please go to http://www.gnu.org/licenses/lgpl-2.1.txt. The Original Code is Time Series * Forecasting. The Initial Developer is Pentaho Corporation. * * Software distributed under the GNU Lesser Public License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to * the license for the specific language governing your rights and limitations. */ /* * RMSEModule.java * Copyright (C) 2010 Pentaho Corporation */ package weka.classifiers.timeseries.eval; import weka.core.Utils; /** * An evaluation module that computes the root mean squared error * of forecasted values. * * @author Mark Hall (mhall{[at]}pentaho{[dot]}com) * @version $Revision: 49983 $ */ public class RMSEModule extends MSEModule { /** * Return the short identifying name of this evaluation module * * @return the short identifying name of this evaluation module */ public String getEvalName() { return "RMSE"; } /** * Return the longer (single sentence) description * of this evaluation module * * @return the longer description of this module */ public String getDescription() { return "Root mean squared error"; } /** * Return the mathematical formula that this * evaluation module computes. * * @return the mathematical formula that this module * computes. */ public String getDefinition() { return "sqrt(sum((predicted - actual)^2) / N)"; } /** * Calculate the measure that this module represents. * * @return the value of the measure for this module for each * of the target(s). * @throws Exception if the measure can't be computed for some reason. */ public double[] calculateMeasure() throws Exception { double[] result = super.calculateMeasure(); for (int i = 0; i < result.length; i++) { if (!Utils.isMissingValue(result[i])) { result[i] = Math.sqrt(result[i]); } } return result; } }