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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
PHP 变量类型的强制转换
Oct 23 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php上传excel表格并获取数据
Apr 27 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
2009/08/04 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
vue实现一拉到底的滑动验证
2019/07/25 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
Vue 组件注册全解析
2020/12/17 Vue.js
vue keep-alive的简单总结
2021/01/25 Vue.js
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python计算回文数的方法
2015/03/11 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
使用css3绘制出各种几何图形
2016/08/17 HTML / CSS
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
英国家喻户晓的家居商店:The Range
2019/03/25 全球购物
实习生个人的自我评价
2013/12/08 职场文书
上班玩手机检讨书
2014/02/17 职场文书
初婚初育证明范本
2015/06/18 职场文书
Nginx解决403 forbidden的完整步骤
2021/04/01 Servers
Python函数中的不定长参数相关知识总结
2021/06/24 Python
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js
Python 绘制多因子柱状图
2022/05/11 Python
SQL Server中使用表变量和临时表
2022/05/20 SQL Server