推荐系统导论笔记(二)

非个性化推荐算法

非个性化推荐是指在不知道用户的Preference的情况下根据用户的投票或行为(如点击、购买、查看等)作出的推荐。其可大致分为如下两类:

  • 观点累积推荐
  • 产品联合推荐

其中,观点累积推荐是指根据系统用户的评分,根据某种统计特征(如净支持数、平均数等),或根据某种算法得出分数,对Item进行Rank的算法。
产品联合推荐是指,通过观测用户的行为,挖掘出Item之间的联系,进而进行推荐的一种算法。如,我们在超市中观测到买X的顾客有相当一部分会买商品Y,我们就可以将二者联合捆绑推荐给用户。


产品联合推荐

正如上文所述,进行产品联合推荐的前提是得到Item间的联系。为此,可用如下公式对用户行为进行建模:

Relation(X,Y)=|XY||X|
在这个模型中,我们考虑既买了产品X又买了产品Y的人数占买了产品X人数的比例。该模型确实可以刻画用户的行为,但同时也有可能陷入所谓的Banana Trap中。考虑这样一种情况,在超市中,香蕉很畅销,大部分顾客在买其他东西的同时,都会顺带买香蕉。设香蕉为Y,其他某种商品为X,则有:
|XY||X|
这样,就会令上述模型得出结论,商品X与香蕉Y具有极高的关联度,并据此加以推荐。显然,这种推荐是毫无意义的。
为了解决这个问题,我们可以将模型修正如下:
Relation(X,Y)=|XY||X||¬XY||¬X|
此时,若商品X与商品Y确实具有极强的相关性,即买了X的顾客很大几率买商品Y,没买商品X的顾客也基本上不会买商品Y。这样,式中分母就会变得非常小,最终,使得Relation(X,Y)取得一个较大的值。反之,若XY关联性不大,分母将会取得一个较大的值,最终导致Relaation(X,Y)较小。

观点累积推荐

该推荐算法是根据全体用户的投票来确定Item的评分,因此需要解决以下三个问题:

  • 用户投票信息收集(投票/评分数据形式)
  • 评分结果展示形式
  • Item评分排序形式

投票数据形式

用户的行为可以反映用户对某个Item的态度与喜好。这种行为不仅限于给相应的Item打分,还可以是一些隐式的行为,如购买、点击、浏览等。具体说来,可分类如下:

  • 显示数据
    • 评分(如给出五星评分条,要求用户打分;典型例子:豆瓣)
    • 评论
    • 投票(如点赞、点支持等;典型例子:StackOverflow、知乎、微博)
  • 隐式数据
    • 点击(典型例子:搜索引擎)
    • 购买(典型例子:电商网站)
    • 关注(典型例子:社交网络)

评分结果展示形式

我们可以利用一些简单的手段对各个Item的评分进行展示。如,显示平均评分或者支持票数占总票数的百分比、净支持数、评分分布直方图等。在常见的网站中,豆瓣采用的就是显示评分分布直方图的形式,而知乎则采用净支持数的形式,如下图:
这里写图片描述
这里写图片描述

Item排序

对Item进行排序时,我们如果使用原始投票数据或者仅仅加上简单的数理统计作为排序依据时,往往不能收到较为满意的结果。其中一个最明显的问题是,如果投票数据很少,而投票评分很高,如果仅按照原始数据来排序的话,这个Item可能排在很靠前的位置,显然,这种排序方式是不合理的。
为此,我们可以引入衰减平均这一概念,即在没有投票的情况下,认为评分是平均的。即:

Score(i)=urui+kμn+k
式中rui是用户u对Item i的评分,μ是评分范围的平均数,k控制了评分证据的要求强度。
在另一些场合,Item的Ranking可能涉及到时间问题。如新闻网站,不仅要考虑用户对内容的感兴趣程度,还要考虑内容发布的时间,时间越久,显然Ranking应该越低,于是可引入时间衰减模型:
Score(i)=(UD+1)α(tnowtpost)γ×P
式中,分子部分是净支持数,分母是现在时间减去发帖时间,最后整体乘以一个惩罚项P,用于惩罚一些不合适的Item(如政治等主题的新闻)。显然,当时间过去越久,分母会越变越大,该分数越低,最终令该新闻的Rank越来越靠后,也就达到了我们的目标。
再比如Reddit网站在2010年左右的新闻评分计算算法为:
Score(i)=log10max(1,|UD|)+sign(UD)tpost45000

这里,并没有使旧Item的评分随着时间的增长而减少,而是使得新的Item的评分高于旧的Item,以期获得类似的时间衰减的效果。
### 操作系统导论学习笔记概述 操作系统是计算机系统的核心组件,它负责管理硬件资源和提供应用程序运行的环境。以下是关于《操作系统导论》课程的一些关键知识点总结[^1]: #### 一、操作系统的基本概念 操作系统可以被定义为一个程序集合,用于管理和协调计算机硬件与软件资源。它提供了用户与计算机硬件之间的接口,并确保多个程序能够高效地共享资源[^3]。 #### 、计算机系统的组成部分 从两个视角理解操作系统: 1. **硬件视角**:包括处理器(CPU)、内存(RAM)、输入/输出设备(I/O)等。 2. **软件视角**:操作系统通过抽象层将硬件资源提供给应用程序使用,从而实现对硬件的保护和高效利用。 #### 三、计算机系统组织 - **中断(Interrupt)**:用于处理外部事件,例如键盘输入或硬盘读写完成信号。 - **陷阱(Trap)**:由程序主动触发的中断,通常用于请求操作系统服务。 - **存储结构**:包括主存(RAM)、辅助存储(硬盘等)以及缓存(Cache)。 - **I/O结构**:描述输入输出设备如何与处理器交互[^1]。 #### 四、计算机系统体系结构 根据处理器的数量和分布方式,计算机系统可以分为以下几类: - **单处理器系统**:只有一个CPU。 - **多处理器系统(Parallel System)**:包含多个CPU,支持并行计算。 - **集群系统**:通过网络连接多个独立计算机协同工作。 #### 五、操作系统的演化阶段 1. **手工操作阶段**:用户直接操作硬件。 2. **批处理阶段**: - 单道批处理系统:一次只能运行一个任务。 - 多道批处理系统:允许多个任务同时驻留在内存中。 3. **分时操作系统**:允许多个用户同时使用计算机资源。 4. **实时操作系统**:满足严格的响应时间要求。 5. **网络操作系统**:支持多台计算机通过网络协作。 6. **分布式操作系统**:管理分布在不同地理位置的计算机资源。 #### 六、操作系统的主要功能模块 1. **进程管理(Process Management)**:负责创建、调度和终止进程。 2. **内存管理(Memory Management)**:分配和回收内存资源,确保多个程序之间不会相互干扰。 3. **存储管理(Storage Management)**:包括文件系统管理和大容量存储器管理。 4. **保护和安全(Protection and Security)**:防止未经授权的访问和恶意攻击[^1]。 #### 七、系统调用 系统调用是操作系统提供的接口,允许应用程序请求操作系统服务。例如,`fork()` 和 `exec()` 是常见的系统调用,用于创建新进程和执行新程序[^2]。 #### 八、红黑树在操作系统中的应用 红黑树是一种自平衡叉搜索树,具有较高的查询效率(时间复杂度为 O(log n))。在操作系统中,红黑树常用于实现有序数据结构,例如 Linux 内核中的虚拟内存管理[^4]。 ```c // 示例代码:C语言中的简单系统调用 #include <stdio.h> #include <unistd.h> int main() { pid_t pid = fork(); // 创建子进程 if (pid == 0) { // 子进程中执行 execl("/bin/ls", "ls", "-l", NULL); // 执行 ls 命令 } else if (pid > 0) { // 父进程中等待子进程结束 wait(NULL); } return 0; } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值