php智能文章相关性匹配,PHP 相关性系数计算

public static function calc($list)

{$cv =[];$X =[];$Y =[];foreach ($list as $r)

{if (count($r) != 2)

{continue;

}$X[] = floatval($r[0]);$Y[] = floatval($r[1]);

}$xavg = array_sum($X)/count($X); //X 平均值

$yavg = array_sum($Y)/count($Y); //Y 平均值

$XMD = []; //X 离均差

$YMD = []; //Y 离均差

$mdcross_sum = 0; //X,Y 离均差交乘积和

$xdif_square_sum = 0; //X 离均差平方和

$count = count($X);for ($i=0; $i

{$xdif = (float)$X[$i]-$xavg; //X 离均差

$ydif = (float)$Y[$i]-$yavg; //Y 离均差

$XMD[$i] = $xdif;$YMD[$i] = $ydif;$mdcross_sum += $xdif*$ydif; //X,Y 离均差交乘积和

$xdif_square_sum += pow($xdif, 2); //X 离均差平方和

}if ($xdif_square_sum == 0)

{$b = 0;$a = 0;

}else{$b = round($mdcross_sum/$xdif_square_sum, 2); //计算斜率 b

$a = round($yavg-$b*$xavg, 2); //计算常数项 a

}/*$str = '';

$str .= "X = ".join(", ",$X)."
";

$str .= "Y = ".join(", ",$Y)."
";

$str .= "常数项 a = ".$a."
";

$str .= "斜率 b = ".$b."
";

$str .= "线性回归方程式 Y = ".$a." + (".$b.")X
";

$str .= "X 平均值 = ".$xavg."
";

$str .= "Y 平均值 = ".$yavg."
";

$str .= "X 离均差 = ".join(", ",$XMD)."
";

$str .= "Y 离均差 = ".join(", ",$YMD)."
";

$str .= "X,Y 离均差交乘积和 = ".$mdcross_sum."
";

$str .= "X 离均差平方和 = ".$xdif_square_sum."
";

SysLog::add($str, 'debug');*/

$cv['a'] = $a;$cv['b'] = $b;//计算相关系数

$cv_up = 0;$cv_down_x = 0;$cv_down_y = 0;for ($i=0; $i

{$cv_up += ($X[$i]-$xavg) * ($Y[$i]-$yavg);$cv_down_x += pow($X[$i]-$xavg, 2);$cv_down_y += pow($Y[$i]-$yavg, 2);

}if ($cv_down_x * $cv_down_y == 0)

{$cv['cv'] = 0;

}else{$cv['cv'] = round($cv_up / sqrt($cv_down_x * $cv_down_y), 2);

}return $cv;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值