早上好,斯塔克。我想找出一种预测数据趋势的方法。我想知道是否有更好的方法..。有什么内置的函数或库我可以查看吗?
下面是我得到的信息:(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);发布于 2015-07-29 15:08:54
该算法是完全失效的,因为它计算的是数组键(年份值、1999年、2000年等)的平均增量,而不是数组值(人口),因此结果总是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);
}在更一般的条件下,该算法是非常简单的,因为它将预测一个平面的增加/减少。
https://stackoverflow.com/questions/31703100
复制相似问题