php 用户推荐系统曼哈顿算法实现

推荐算法协同过滤php,常用推荐算法介绍——协同过滤推荐算法 1. 基本概念协同过滤推荐方法的主要思想是,利用已有用户群过去的行为或意见预测当前用户最可能喜欢哪些东西或对哪些东西感兴趣。纯粹的协同方法的输入数据只有给定的用户-物品评分矩阵,输出数据一般有以下几种类型:(1)表示当前用户对物品喜欢或不喜欢程度的预测数值;(2)n项推荐物品的列表。用户行为的统一表示:user id产生行为的用户的唯一标识item id产生行为的对象的唯一标识behavior t... 阅读详情
public function index2()
    {
        $users = '{"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoenix": 5.0, "Slightly Stoopid": 1.5, "The Strokes": 2.5, "Vampire Weekend": 2.0},
         "Bill":{"Blues Traveler": 2.0, "Broken Bells": 3.5, "Deadmau5": 4.0, "Phoenix": 2.0, "Slightly Stoopid": 3.5, "Vampire Weekend": 3.0},
         "Chan": {"Blues Traveler": 5.0, "Broken Bells": 1.0, "Deadmau5": 1.0, "Norah Jones": 3.0, "Phoenix": 5, "Slightly Stoopid": 1.0},
         "Dan": {"Blues Traveler": 3.0, "Broken Bells": 4.0, "Deadmau5": 4.5, "Phoenix": 3.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 2.0},
         "Hailey": {"Broken Bells": 4.0, "Deadmau5": 1.0, "Norah Jones": 4.0, "The Strokes": 4.0, "Vampire Weekend": 1.0},
         "Jordyn":  {"Broken Bells": 4.5, "Deadmau5": 4.0, "Norah Jones": 5.0, "Phoenix": 5.0, "Slightly Stoopid": 4.5, "The Strokes": 4.0, "Vampire Weekend": 4.0},
         "Sam": {"Blues Traveler": 5.0, "Broken Bells": 2.0, "Norah Jones": 3.0, "Phoenix": 5.0, "Slightly Stoopid": 4.0, "The Strokes": 5.0},
         "Veronica": {"Blues Traveler": 3.0, "Norah Jones": 5.0, "Phoenix": 4.0, "Slightly Stoopid": 2.5, "The Strokes": 3.0}
        }';
        $usersArray = json_decode($users, true);

        $recommend = $this->recommend('Hailey', $usersArray);
        echo "<pre>";
        print_r($recommend);
    }

    //实现推荐
    public function recommend($username, $users)
    {
        //获得最近用户的name
        $nearest = $this->computeNearestNeighbor($username, $users);
        $nearest = $nearest['0']['user'];
        $recommendations = array();
        //得到最近用户的推荐列表
        $neighborRatings = $users[$nearest];
        if ($this->checkArray($neighborRatings)) {
            $usernameAction = $users[$username];
            foreach ($neighborRatings as $name => $code) {
                //读取自己没有的
                if (!isset($usernameAction[$name])) {
                    $recommendations[] = ['name' => $name, 'score' => $code];
                }
            }
        }
        $this->sortArrByField($recommendations, 'score', true);
        return $recommendations;
    }

    // 计算曼哈顿距离
    private function manhattan($rate1, $rate2)
    {
        $distance = 0;
        if ($this->checkArray($rate1)) {
            foreach ($rate1 as $name => $value1) {
                if (isset($rate2[$name])) {
                    $value2 = $rate2[$name];
                    $distance += abs($value1 - $value2);
                }
            }
        } else {
            $distance = -1;
        }
        return $distance;
    }

    // 返回最近距离用户
    private function computeNearestNeighbor($username, $users)
    {
        $distances = array();
        if ($this->checkArray($users)) {
            foreach ($users as $key => $user) {
                if ($key == $username) {
                    continue;
                }
                $distance = $this->manhattan($user, $users[$username]);
                $data = array(
                    'user' => $key,
                    'distance' => $distance,
                );
                $distances[] = $data;
            }
        }
        $this->sortArrByField($distances, 'distance', false);
        return $distances;
    }

    /**
     * @param $array
     * @return bool
     * 检查数组有效性
     */
    private function checkArray($array)
    {
        if (is_array($array) && count($array) > 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @param $array
     * @param $field
     * @param bool $desc
     * 根据数组的某个值进行排序
     */
    private function sortArrByField(&$array, $field, $desc = false)
    {
        $fieldArr = array();
        foreach ($array as $k => $v) {
            $fieldArr[$k] = $v[$field];
        }
        $sort = $desc == false ? SORT_ASC : SORT_DESC;
        array_multisort($fieldArr, $sort, $array);
    }

 

2024秋招淘天集团算法岗笔试复盘:核心考点与实战策略 在技术岗位招聘中,算法能力是衡量候选人基本功的重要标准。字符串匹配与动态规划作为两类经典算法,始终是笔试中的高频考点。KMP算法通过前缀函数避免重复匹配,将时间复杂度优化至线性;动态规划则通过状态转移求解最优子结构问题,常见于LIS、背包等题型。掌握这些算法的原理与变形,不仅能应对算法笔试,也为推荐、搜索等工业场景提供基础支撑。本文以2024年秋招阿里巴巴淘天集团算法岗第一批笔试为案例,系统复盘了笔试形式、算法题核心考点(含KMP、动态规划、拓扑排序等)、机器学习基础题及实战中的时间分配与避坑经验,为备战大 阅读详情

相关推荐

PHP实现基于规则的推荐算法(附完整源码)

PHP实现基于规则的推荐算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 393

php话题推荐算法,你应该熟悉的10个PHP常见算法

1.猴王算法一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。/*** @param $m* @param $n* @return mixed**/private function mon...

weixin_30209891的博客 1072

PHP实现基于知识的推荐算法(附完整源码)

PHP实现基于知识的推荐算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 443

php 实现推荐算法

在PHP中实现推荐算法的应用场景通常包括电商、社交媒体、内容平台等。推荐算法可以帮助用户找到与其兴趣相关的内容,提高用户体验和平台黏性。

Crazy_shark的博客 1356

【Chisel】2.4 时序逻辑

2.4 时序逻辑@[TOC](2.4 时序逻辑)前言寄存器(`Reg`)实例Chisel的状态函数实例2 RegNext实例3 RegInit移位器附录 显式的时钟信号和复位信号 前言 没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,没有状态机的逻辑电路是不完整的,重要的事情说三遍。 这一节我们将要学习Chisel中的时序逻辑。在最后我们会实现一个移位器。 这里你需要知道的是,前面的这几节实际上都是对Chisel的基础语法的学习,它并不会给你带来很大的“惊喜”。Chisel真正的作用是把电路

快乐学习小猪猪的博客 843

汽车级智能栅极驱动器深度解析 | 连载03:功能框图与工作模式详解

在前两期连载中,我们分析了DRV871x-Q1的产品架构、引脚配置和电气特性。本期我们将深入探讨DRV871x-Q1的功能框图和工作模式,这是理解芯片内部工作机制的关键。通过分析功能框图,我们能够清晰地了解各功能模块之间的关系和信号流向;通过工作模式分析,我们能够掌握芯片在不同应用场景下的配置方法。这些知识对于系统设计和故障排查都至关重要。

VehSwHwDeveloper的博客 1099

php 推荐系统算法,php 用户推荐系统曼哈顿算法实现

/*** Created by PhpStorm.* User: linsn 10832126@qq.com* Date: 6/29/2017* Time: 10:25 AM*/$users = '{"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Norah Jones": 4.5, "Phoenix": 5.0, "Slight...

weixin_29721821的博客 381

FANUC机器人KAREL编程实战:手把手教你用SOCKET指令连接外部设备(附完整.KL文件)

本文详细解析了FANUC机器人KAREL编程中SOCKET指令的应用,从开发环境配置到工业级通讯全流程,涵盖网络参数设置、模块化代码设计、错误处理及现场调试技巧。通过实战案例,帮助开发者掌握与外部设备稳定连接的关键技术,提升工业自动化系统的通讯可靠性。

weixin_30907935的博客 226

php计算用户喜好相似度,推荐系统之协同过滤计算用户相似度

基于用户的协同过滤算法是推荐系统中最古老的算法,协同过滤,从字面上理解,就是分析用户行为之间的关系,对特定用户进行推荐.用户行为数据有很多,大概可以分为这么几类:浏览、点击、购买、评分、评论、分享等等。本文使用ratings.data中包含userid,以及user对观看过的movie的评分信息与时间为了方便处理,本文已经将user.data转换为user.csv,这份数据集可以点击这里下载我们使...

weixin_42271195的博客 1117

保姆级教程:在华为MateBook E Go上安装安卓子系统(含Hyper-V配置和地区切换避坑指南)

本文提供在华为MateBook E Go(ARM架构)上安装Windows 11安卓子系统(WSA)的详细指南。重点阐述了ARM平台无需指令转译的流畅原生体验优势,并逐步讲解启用Hyper-V虚拟化、切换系统区域以安装Amazon Appstore、配置开发人员模式及使用ADB安装第三方应用(如华为应用市场)的全过程,助您解锁高效的原生安卓应用生态。

kafka6courier的博客 534

ROS实践(四)机器人SLAM建图(gmapping)

本文介绍了SLAM技术及其实现方法。SLAM(同步定位与地图构建)让机器人在未知环境中通过传感器数据自主定位并构建地图。文章详细讲解了激光雷达、RGBD相机等常用传感器,以及gmapping和map_server这两个ROS功能包的使用方法。重点阐述了SLAM建图实验步骤:配置gmapping节点参数、启动机器人仿真、运行gmapping节点、使用rviz可视化工具、通过键盘遥控机器人完成地图构建并保存。实验结果表明,该方法能有效实现机器人自主建图功能,为后续导航等应用奠定基础。

qq_1033275663的博客 4334

协同过滤——基于用户的推荐算法

一个开源电子书: 下载下来看了一下,发现该书讲的数据挖掘算法浅显易懂,受益匪浅,不敢独享,特将我的理解+精简翻译奉上: 协同过滤 1.1.  共同爱好——我喜欢你所喜欢的。 我们从学习推荐系统来开始数据挖掘之旅,推荐系统到处可见,国外的amazon,国内的京东、淘宝等系统。 如何理解推荐系统呢?我们看一个例子: 例如我们在京东浏览一本《数据挖掘概念与技术》: 从页面向下看:

kailon0103的专栏 1640

Dofbot机械臂从零部署笔记(1)——ROS之创建URDF模型、配置Moveit和MotionPlanning

Dofbot机械臂从零部署笔记(1)——ROS之创建URDF模型、配置Moveit和MotionPlanning

takedachia的博客 8697

USB转I2C调试实战:100KHz速率下寄存器批量扫描与Excel分析

I2C总线是嵌入式系统中常见的两线制通信协议,广泛用于传感器、EEPROM、电源管理等芯片的配置与数据读取。调试这类设备时,传统方式需要反复编写固件、抓取波形,效率较低。利用USB转I2C适配器,可以将PC模拟为主控制器,通过虚拟串口直接发送读写命令,快速扫描目标设备寄存器空间。结合Excel的批量数据处理能力,能直观生成寄存器映射表并定位异常数据。本文以FT231X桥接方案为例,介绍100KHz标准速率下的总线调试方法,涵盖上拉电阻设计、驱动配置、Python脚本自动化扫描以及时序参数测量,助力开发者高效

weixin_34088583的博客 507

手把手教你用Cadence Virtuoso仿真一个5GHz CMOS分频器:从原理图到后仿,避开那些教科书上没写的坑

本文详细介绍了在Cadence Virtuoso环境中设计5GHz CMOS分频器的完整流程,从原理图设计到后仿真优化,特别关注实际工程中容易被忽视的关键问题。内容涵盖分频器核心指标解析、锁存器拓扑选择、接口设计匹配以及后仿真优化策略,为射频集成电路设计提供实用避坑指南。

weixin_26934905的博客 262

一次点击跑通:用 Postman 自动获取并携带 CSRF token,测试 SAP OData 写操作

SAP OData 写操作自动化测试方案 针对 SAP Gateway OData 服务写操作中常见的 CSRF token 验证问题,本文提出了一套基于 Postman 的自动化解决方案: 问题分析:解释了 CSRF token 的验证机制及其必要性,说明手工测试效率低下的原因 解决方案: 使用 Postman 环境变量存储 token 通过脚本自动获取并传递 token 利用 Collection Runner 实现一键执行 实施步骤: 创建环境变量存储 token 第一个请求获取 token 并存入变

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 306

爱奇艺算法岗笔试拆解:从KMP到机器学习的高频考点与实战策略

在算法岗招聘流程中,笔试环节往往以数据结构、经典算法和机器学习基础为筛选杠杆,重点考察候选人将抽象问题转化为数学模型的能力。从KMP字符串匹配的next数组推导,到快排与归并排序的稳定性分析,再到贪心算法与动态规划的适用场景,这些看似基础的知识点实则是工程优化的基石。同时,粒子群优化、XGBoost、音频重采样、卡尔曼滤波等交叉领域算法,也日益成为大厂笔试的高频考点。以爱奇艺2020校招算法方向真题为样本,系统拆解各类题目的考察逻辑与解题策略,可为备战秋招的应届生及转行者提供完整的备考框架。

weixin_34221332的博客 339

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

转】从源代码剖析Mahout推荐引擎

  原博文出自于:  http://blog.fens.me/mahout-recommend-engine/      感谢! 从源代码剖析Mahout推荐引擎 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chuk...

weixin_30325793的博客 121

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

用Python的sklearn库,5分钟搞定一个kNN车辆推荐小Demo(附完整代码)

本文介绍了如何使用Python的sklearn库快速构建一个kNN车辆推荐引擎。通过数据预处理、归一化处理、模型训练和预测分析,展示了kNN算法在实际场景中的应用。文章还提供了完整的代码示例和参数调优建议,帮助读者在5分钟内完成一个实用的机器学习Demo。

weixin_30617695的博客 289

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

php用户推荐算法,基于用户的推荐算法余弦相似性实现

1.[文件]cosine.py#-*- coding: utf-8 -*-'''Created on 2012-9-3@author: Jekey余弦相关性,如果数据稀疏,考虑使用该算法'''import codecsfrom math import sqrtusers = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0, "Nor...

weixin_36070568的博客 455

php算法书籍推荐,六种经典排序算法(php版)

class Sort{/*** 一、冒泡排序:* 思路:* 1. 循环 n-1 个位置,对于每个位置 i,都和 [i+1,n] 的每个位置 j 上的数对比* 2. 如果位置 i 上的数大于(小于)位置 j 上的数,交换这两个位置上的数* 3. 使得对比完成后,第 i 个位置上存放了第 i 小(大)的数* 分析:* 1. 时间复杂度 O(n^2),空间复杂...

weixin_30957307的博客 354

mysql 海明距离_推荐系统的常用算法对比

在推荐系统简介中,我们给出了推荐系统的一般框架。很明显,推荐方法是整个推荐系统中最核心、最关键的部分,很大程度上决定了推荐系统性能的优劣。目前,主要的推荐方法包括:基于内容推荐、协同过滤推荐、基于关联规则推荐、基于效用推荐、基于知识推荐和组合推荐。 一、基于内容推荐基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推...

weixin_39682673的博客 464

php 推荐算法的实现,推荐算法的Python实现(样例代码)

#!/usr/bin/env pythonimport random”’items => {’12’:’PHP’,’1203′:’Storm’,’123′:’Ubuntu’}items_pool => [12,32,121,324,532,123,53,1203,429,2932]user_items => {‘1010’:[12,1203,123,429]}”’def Rand...

weixin_32000561的博客 812
上一篇: PHP截取指定字符前面和后面的内容
下一篇: Destoon后台权限-不给客户创始人权限并屏蔽部分功能
withoutfear
博客等级 码龄13年 541粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值