早上好,Stack。我试图找出一种预测数据趋势的方法。我想知道是否有更好的方法来做这件事。我可以研究一下内置的函数或库吗? / p>
以下是我所得到的:(http://3v4l.org/RGU3i)
$PopulationOfTexas = array(
1999 => 20.56, // in millions
2000 => 21.56,
2001 => 22.56,
2002 => 23.56
);
//generate an array sohwing the difference in each year compared to the previous year
$differneces = array();
$lastyear = null;
foreach($PopulationOfTexas as $k=>$v){
if(empty($lastyear)){$lastyear = $k; continue;}
$differneces[$k] = $k - $lastyear;
$lastyear = $k;
//use this later
$lastitem = array("year"=>$k, "data"=>$v);
}
//get the average difference per year
$count = 0;
$total = 0;
foreach($differneces as $k=>$v){
$count++;
$total += $v;
}
$average = number_format(($total/$count), 2);
//make a prediction
$predictions = array();
for($i=0;$i<5;$i++){
$year = isset($year) ? $year+1 : $lastitem["year"]+1;
$prediction = isset($prediction) ? $prediction+floatval($average) : $lastitem["data"]+floatval($average);
$predictions[$year] = $prediction;
}
print_r($predictions);
答案 0 :(得分:1)
该算法完全被破解,因为它正在计算数组键的平均增量(年份值,1999年,2000年等),而不是数组值(总体),因此结果始终为1.
如果您添加了更多变异,您可能会发现错误,这会掩盖您的样本数据总是增加1的事实。修复:
foreach($PopulationOfTexas as $k=>$v){
if(empty($lastyear)){$lastyear = $v; continue;}
$differneces[$k] = $v - $lastyear;
$lastyear = $v;
//use this later
$lastitem = array("year"=>$k, "data"=>$v);
}
更一般地说,算法非常简单,因为它可以预测平缓的增加/减少。