推荐系统打散算法--轮询(分类桶)

打散作为推荐系统比较重要的数据处理逻辑,是推荐系统避免数据扎堆最重要的实现手段,本次介绍推荐算法中最简单的轮询算法。

轮询算法一般分为单维度、双维度轮询,所以本文主要介绍,单维度轮询和双维度轮询两种。

单维度轮询:

单维度轮询主要是把数据按照某一个角度进行分类,比如推荐业务中,相同品牌的商品不能相邻出现,这里可以对数据集作以下处理,具体流程如下

注:不同的形状代表不同的品牌

按照品牌分类前的结果集如下图:
在这里插入图片描述
按照品牌分类后的结构如下图(形状):在这里插入图片描述
针对以上结构,可轮询每个分类,每次取分类中某个位置的一个元素,最终轮询结果如下:

在这里插入图片描述
根据上面结果可见,当某个分类比较多时(如图中的三角形有5个),容易导致尾部扎堆现象出现,这也是分类轮询比较大的缺点。

双维度轮询:

双维度轮询即在单维度轮询的基础上,再次对单维度分类结果进行第二个分类去分类,然后对第二个维度分类结果轮询,再轮询第一个结果分类,比如推荐业务中按照四级商品组(形状),品牌(字体颜色)轮询,大体流程如下

分类:原始结果集 -》 维度一分类 -》 维度二分类

轮询:维度二分类结果轮询 -》 维度一分类结果轮询 -》 最终轮询结果集

原始结果集
在这里插入图片描述
分类结果
在这里插入图片描述
维度二轮询
在这里插入图片描述
维度一轮询(最终结果)
在这里插入图片描述
这种情况会打的更散,但是依旧无法解决维度扎堆的情况,只能相对缩小扎堆的可能性(9、10依旧扎堆,一般来说,标准差越大,越不适合用这种打散方式)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于 MATLAB 的无线资源分配算法-轮询算法的实现,可以输入用户数量,输出系统吞吐量、用户等待时间和 Jain 公平性指数。 ```matlab % 轮询算法的 MATLAB 实现 function [sys_throughput, user_wait_time, jain_index] = polling_algorithm(num_users) % 初始化每个用户的传输速率和等待时间 user_rate = randi([1, 10], 1, num_users); user_wait_time = zeros(1, num_users); % 计算每轮分配的传输时间和每个用户的比例因子 alloc_time = 1; rate_factors = user_rate ./ sum(user_rate); % 开始轮询过程 while true % 每个用户依次传输 for i = 1:num_users % 如果用户等待时间大于 0,则继续等待 if user_wait_time(i) > 0 user_wait_time(i) = user_wait_time(i) - alloc_time; % 否则,用户开始传输 else % 计算用户的传输时间和等待时间 user_trans_time = rate_factors(i) * alloc_time; user_wait_time(i) = (1 - rate_factors(i)) * alloc_time; % 更新系统吞吐量 sys_throughput = 1 / sum(user_wait_time); % 如果所有用户都传输完毕,则结束轮询过程 if all(user_wait_time <= 0) % 计算 Jain 公平性指数 jain_index = (sum(rate_factors) ^ 2) / (num_users * sum(rate_factors .^ 2)); % 输出结果 fprintf('系统吞吐量: %f\n', sys_throughput); fprintf('用户等待时间: %f\n', user_wait_time); fprintf('Jain 公平性指数: %f\n', jain_index); return end end end end end ``` 上面的代码中,我们首先随机生成每个用户的传输速率,并初始化每个用户的等待时间。然后,我们不断进行轮询过程,每次分配一定的传输时间给每个用户。如果一个用户等待时间大于 0,则继续等待;否则,用户开始传输,并计算它的传输时间和等待时间。在每次分配后,我们还计算了系统吞吐量和 Jain 公平性指数。如果所有用户都传输完毕,则结束轮询过程并输出所有结果。 你可以调用这个函数并输入你想要的用户数量来测试它的功能,例如: ```matlab polling_algorithm(5); ``` 这将输出一个包含系统吞吐量、用户等待时间和 Jain 公平性指数的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值