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


Posted in PHP onAugust 08, 2017

本文实例讲述了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更快的提供文件下载的代码
Jun 13 PHP
自定义php类(查找/修改)xml文档
Mar 26 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
php实现encode64编码类实例
Mar 24 PHP
php实现读取内存顺序号
Mar 29 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
PHP将URL转换成短网址的算法分享
Sep 13 PHP
php发送http请求的常用方法分析
Nov 08 PHP
PHP多进程之pcntl_fork的实例详解
Oct 15 PHP
PHP addslashes()函数讲解
Feb 03 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
Mar 30 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 #PHP
PHP 文件锁与进程锁的使用示例
Aug 07 #PHP
PHP实现找出有序数组中绝对值最小的数算法分析
Aug 07 #PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 #PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 #PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 #PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 #PHP
You might like
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
jQuery.each使用详解
2015/07/07 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python合并字符串的3种方法
2015/05/21 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python Series从0开始索引的方法
2018/11/06 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
主办会计岗位职责
2014/03/13 职场文书
2014最新实习证明模板
2014/10/02 职场文书
2016春季运动会前导词
2015/11/25 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
创业计划书之寿司
2019/07/19 职场文书