欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP数据分析引擎计算余弦相似度算法示例

程序员文章站 2024-03-12 00:00:01
本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《php数据结构与算法教程》、《php程序设计算法总结》、《php基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》及《php数组(array)操作技巧大全

希望本文所述对大家php程序设计有所帮助。