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公用函数列表[正则]
Feb 22 PHP
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
PHP 第三节 变量介绍
Apr 28 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
Jun 24 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
php检查字符串中是否有外链的方法
Jul 29 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
Jun 06 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 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实现分页的一个示例
2006/10/09 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
2014/06/12 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
php图片裁剪函数
2018/10/31 PHP
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python实现控制台进度条功能
2016/01/04 Python
Python解析树及树的遍历
2016/02/03 Python
python WindowsError的错误代码详解
2017/07/23 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
Flask之请求钩子的实现
2018/12/23 Python
Python笔记之facade模式
2019/11/20 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
python默认参数调用方法解析
2020/02/09 Python
Python如何输出整数
2020/06/07 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
写好自荐信的要点
2013/11/06 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
活动主持人开场白
2015/05/28 职场文书
财务年终工作总结大全
2019/06/20 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL