预测数据趋势
Predicting Trends in Data
早上好,斯塔克。我正在尝试找出一种预测数据趋势的方法。我想知道是否有更好的方法来做到这一点。是否有任何内置函数或库可供我研究?
这是我得到的:(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);
该算法完全错误,因为它计算的是数组键(年份值、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);
}
更笼统地说,该算法非常简单,因为它会预测平坦的增加/减少。
早上好,斯塔克。我正在尝试找出一种预测数据趋势的方法。我想知道是否有更好的方法来做到这一点。是否有任何内置函数或库可供我研究?
这是我得到的:(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);
该算法完全错误,因为它计算的是数组键(年份值、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);
}
更笼统地说,该算法非常简单,因为它会预测平坦的增加/减少。