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文件读写操作之文件写入代码
Jan 13 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
关于PHP语言构造器介绍
Jul 08 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
PHP中file_exists使用中遇到的问题小结
Apr 05 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
PHP实现的分解质因数操作示例
Aug 01 PHP
php写app用的框架整理
Sep 29 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 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
2009/11/30 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
对联广告js flash激活
2006/10/19 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
JS之相等操作符详解
2016/09/13 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
jQuery中的类名选择器(.class)用法简单示例
2018/05/14 jQuery
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
python self,cls,decorator的理解
2009/07/13 Python
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python读写ini文件的方法
2015/05/28 Python
python脚本内运行linux命令的方法
2015/07/02 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
python时间与Unix时间戳相互转换方法详解
2020/02/13 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
智能室内花园:Click & Grow
2021/01/29 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
民事授权委托书范文
2014/08/02 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
2015新学期开学寄语
2015/02/26 职场文书
档案工作个人总结
2015/03/03 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
尼克胡哲观后感
2015/06/08 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android