/** * {@inheritDoc} */ public function iteration($count = null) { assert(is_null($count)); $errorCalculation = new ErrorCalculation(); foreach ($this->training as $pair) { // calculate the error $output = $this->network->compute($pair->getInput()); for ($currentAdaline = 0; $currentAdaline < $output->size(); ++$currentAdaline) { $diff = $pair->getIdeal()->getData($currentAdaline) - $output->getData($currentAdaline); // weights for ($i = 0; $i <= $this->network->getInputCount(); ++$i) { $input = 0.0; if ($i == $this->network->getInputCount()) { $input = 1.0; } else { $input = $pair->getInput()->getData($i); } $this->network->addWeight(0, $i, $currentAdaline, $this->learningRate * $diff * $input); } } $errorCalculation->updateError($output->getData(), $pair->getIdeal()->getData(), $pair->getSignificance()); } // set the global error $this->setError($errorCalculation->calculate()); }
/** * @param MLRegression method * @param MLDataSet data * @return double */ function calculateRegressionError(MLRegression $method, $data) { $errorCalculation = new ErrorCalculation(); if ($method instanceof MLContext) { $method->clearContext(); } foreach ($data->getData() as $pair) { $actual = $method->compute($pair->getInput()); $errorCalculation->updateError($actual->getData(), $pair->getIdeal()->getData(), $pair->getSignificance()); } return $errorCalculation->calculate(); }
/** * Calculate the error for this neural network. * The error is calculated * using root-mean-square(RMS). * * @param * MLDataSet data * The training set. * @return double The error percentage. */ public function calculateError(MLDataSet $data) { $errorCalculation = new ErrorCalculation(); $actual = array(); $pair = BasicMLDataPair::createPair($data->getInputSize(), $data->getIdealSize()); for ($i = 0; $i < $data->getRecordCount(); ++$i) { $data->getRecord($i, $pair); $this->compute($pair->getInputArray(), $actual); $errorCalculation->updateError($actual, $pair->getIdealArray(), $pair->getSignificance()); } return $errorCalculation->calculate(); }