Exemplo n.º 1
0
 /**
  * {@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());
 }
Exemplo n.º 2
0
/**
 * @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();
}
Exemplo n.º 3
0
 /**
  * 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();
 }