本文主要介绍php数据分析引擎计算余弦相似度算法,结合具体实例形式分析了php计算余弦相似度的操作步骤与相关实现技巧,需要的朋友可以参考下,希望能帮助到大家。
关于余弦相似度的相关介绍可参考百度百科:余弦相似度
<?php
/**
* 数据分析引擎
* 分析向量的元素 必须和基准向量的元素一致,取最大个数,分析向量不足元素以0填补。
* 求出分析向量与基准向量的余弦值
* @author yu.guo@okhqb.com
*/
/**
* 获得向量的模
* @param unknown_type $array 传入分析数据的基准点的n维向量。|eg:array(1,1,1,1,1);
*/
function getmarkmod($arrparam){
$strmoddouble = 0;
foreach($arrparam as $val){
$strmoddouble += $val * $val;
}
$strmod = sqrt($strmoddouble);
//是否需要保留小数点后几位
return $strmod;
}
/**
* 获取标杆的元素个数
* @param unknown_type $arrparam
* @return number
*/
function getmarklenth($arrparam){
$intlenth = count($arrparam);
return $intlenth;
}
/**
* 对传入数组进行索引分配,基准点的索引必须为k,求夹角的向量索引必须为 'j'.
* @param unknown_type $arrparam
* @param unknown_type $index
* @ruturn $arrback
*/
function handindex($arrparam, $index = 'k'){
foreach($arrparam as $key => $val){
$in = $index.$key;
$arrback[$in] = $val;
}
return $arrback;
}
/**
*
* @param unknown_type $arrmark标杆向量数组(索引被处理过)
* @param unknown_type $arranaly 分析向量数组 (索引被处理过) |array('j0'=>1,'j1'=>2....)
* @param unknown_type $strmarkmod标杆向量的模
* @param unknown_type $intlenth 向量的长度
*/
function getcosine($arrmark, $arranaly, $strmarkmod ,$intlenth){
$strvector = 0;
$strcosine = 0;
for($i = 0; $i < $intlenth; $i++){
$strmarkval = $arrmark['k'.$i];
$stranalyval = $arranaly['j'.$i];
$strvector += $strmarkval * $stranalyval;
}
$arranalymod = getmarkmod($arranaly); //求分析向量的模
$strfenzi = $strvector;
$strfenmu = $arranalymod * $strmarkmod;
$strcosine = $strfenzi / $strfenmu;
if(0 !== (int)$strfenmu){
$strcosine = $strfenzi / $strfenmu;
}
return $strcosine;
}
?>
以上就是php计算余弦相似度算法实例的详细内容。