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关于array_multisort多维数组排序的使用说明
Jan 04 PHP
PHP中常用的输出函数总结
Sep 22 PHP
php+mysql删除指定编号员工信息的方法
Jan 14 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
php提交post数组参数实例分析
Dec 17 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
PHP环境搭建(php+Apache+mysql)
Nov 14 PHP
yii框架无限极分类的实现方法
Apr 08 PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 PHP
PHP代码覆盖率统计详解
Jul 22 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
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
JQuery开发的数独游戏代码
2010/10/29 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
理解javascript async的用法
2017/08/22 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
python中的对象拷贝示例 python引用传递
2014/01/23 Python
Python中关于使用模块的基础知识
2015/05/24 Python
python实现发送邮件及附件功能
2021/03/02 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
PyTorch的torch.cat用法
2020/06/28 Python
MYSQL基础面试题
2012/05/13 面试题
大学军训自我鉴定
2013/12/15 职场文书
毕业证代领委托书
2014/09/26 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python