Geograph

LinearInterpolation.php

Feb 11th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.57 KB | None | 0 0
  1. <?php
  2.   // Коэффициент при x
  3.   $k = rand() / getrandmax() * (5 - (-5)) + (-5);
  4.    
  5.   // Свободный член уравнения прямой
  6.   $c = rand() / getrandmax() * (5 - (-5)) + (-5);
  7.    
  8.   // Вывод данных начальной прямой
  9.   echo "Starting line: $k * X + $c" . PHP_EOL;
  10.    
  11.   // Набор точек X:Y
  12.   $data = array
  13.   (
  14.       1 => 2,
  15.       2 => 4.2,
  16.       2.5 => 5,
  17.       3.8 => 7.9,
  18.       4 => 9,
  19.       6 => 10.2,
  20.       6.6 => 13,
  21.       7.2 => 15.3,
  22.       8 => 17.1,
  23.       8.5 => 19.5
  24.   );
  25.    
  26.   // Скорость обучения
  27.   $rate = 0.0001;
  28.    
  29.   // Высчитать y
  30.   function proceed($x)
  31.   {
  32.     global $k, $c;
  33.     return $x * $k + $c;
  34.   }
  35.    
  36.   // Тренировка сети
  37.   for ($i = 0; $i < 100000; $i++)
  38.   {
  39.     // Получить случайную X координату точки
  40.     $x = array_rand($data);
  41.  
  42.     // Получить соответствующую Y координату точки
  43.     $true_result = $data[$x];
  44.  
  45.     // Получить ответ сети
  46.     $out = proceed($x);
  47.  
  48.     // Считаем ошибку сети
  49.     $delta = $true_result - $out;
  50.  
  51.     // Меняем вес при x в соответствии с дельта-правилом
  52.     $k += $delta * $rate * $x;
  53.  
  54.     // Меняем вес при постоянном входе в соответствии с дельта-правилом
  55.     $c += $delta * $rate;
  56.   }
  57.   // Вывод данных готовой прямой
  58.   echo "Result line: $k * X + $c";
  59. ?>
Add Comment
Please, Sign In to add comment