用线性回归方法计算直线斜率
最近在做设备负载预测,考虑到负载波动,需要拿出近似增长率来计算未来数天的设备负载增长状况,想想看以前的数学都没有学好,算法也没有搞好,只能求助同事和百度Google,最终还是折腾出来了。
关于线性回归可以参考百度知道。其中采用最小二乘法可以比较容易的算出过往设备负载增长的斜率,具体公式如下:
下面代码简单枚举历史10个点来计算该设备负载增长率:
//Y坐标值表示设备历史负载
$y = array(52.09, 52.4, 53.29, 54.22, 55.15, 55.83, 56.89, 56.98, 57.55, 57.8);
//X坐标值表示顺序天数
$x = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
//计算X和Y均值
$ax = array_sum($x)/count($x);
$ay = array_sum($y)/count($y);
//计算斜率公式中的分母(em)和分子(ez)
$em = 0;
$ez = 0;
for ($i = 0; $i < count($x); $i++) {
//分母求和
$em += (($x[$i] - $ax) * ($y[$i] - $ay));
//分子求和
$ez += pow(($x[$i] - $ax), 2);
}
//斜率0.69
echo $em/$ez;
//第十一个点预测负载值58.34
echo $em/$ez * 10 + $ay - ($em/$ez)*$ax;
很多概念都不甚懂,反正数学是没有学好的,找来公式代一代,嘿嘿,还算可以,对于波动比较大的就比较难以预测,这个近似值还是很有参考意义的。


昵称:深空
还没听说过过这种方法呢,数学学的也不是很好啊。
唉。数学不好。看不懂那公式。