За последние 24 часа нас посетили 22727 программистов и 1263 робота. Сейчас ищут 782 программиста ...

Построение прогноза

Тема в разделе "Прочие вопросы по PHP", создана пользователем dsda, 25 июл 2010.

  1. dsda

    dsda Активный пользователь

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    Доброе время суток всем.
    Столкнулся с такой проблемой. Есть ряд данных. На их основе надо построить прогноз на t+n.
    Нигде не нашел ничего подходящего ни на php ни на чем-то другом.
    Подскажите плиз где почитать.

    Желательно с сезонными тенденциями и полиноминальными трендами с учетом сглаживания.
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    обычно тогда берут теорию и реализуютс сами.
     
  3. dsda

    dsda Активный пользователь

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    Я взял, но результаты не устраивают. Постоянно идет регрессия...
     
  4. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    без труда не вытащишь и ручку из пруда :)

    готовое решение врядли есть
     
  5. dsda

    dsda Активный пользователь

    С нами с:
    3 сен 2008
    Сообщения:
    34
    Симпатии:
    0
    $hits это массив с данными вида (1,2,3,4,5,6..n)
    Код (Text):
    1.  
    2.     $t=Array();
    3.     if (count($hits)%2!=0) {
    4.         $_p_num=round(count($hits)/2, 0)-count($hits)%2;
    5.         for ($i=$_p_num-($_p_num*2);$i<=$_p_num;$i++) {
    6.             $t[]=$i;
    7.         }
    8.     } else {
    9.         $_p_num=count($hits)/2;
    10.         for ($i=$_p_num-($_p_num*2);$i<=$_p_num;$i++) {
    11.             if ($i==0) continue;
    12.             $t[]=$i;
    13.         }  
    14.     }
    15.  
    16.     $t_sqr=Array();
    17.     foreach ($t as $k => $v) { $t_sqr[] = $v*$v; }
    18.    
    19.     $ty=Array();
    20.     foreach ($t as $k => $v) { $ty[] = $v*$hits[$k]; }
    21.    
    22.     $a0=0; foreach ($hits as $k => $v) { $a0+=$v; }
    23.     $a0=$a0/(count($hits));
    24.  
    25.     $a1=0; foreach ($ty as $k => $v) { $a1+=$v; }
    26.     $an=0; foreach ($t_sqr as $k => $v) { $an+=$v; }
    27.     $a1=$a1/$an; unset($an);
    28.    
    29.     $hits_t=Array();
    30.     foreach ($t as $k => $v) {
    31.         $hits_t[] = round($a0+$a1*$v);
    32.     }
    На выходе в $hits_t получаем значения тренда.