1.1 什么是机器学习

利用数据解决现实问题

1.2 机器学习的七个步骤

  1. 收集数据
  2. 数据预处理
  3. 模型选择
  4. 训练
  5. 评估
  6. 超参数调整
  7. 预测

1.3什么是回归问题,什么是分类问题

我们要判断我们的数据类型是离散的或者连续的。分类问题是像逻辑回归这样把数据的范围规定在0~1之间,只有0和1,也就是一个二分类;回归问题就是像线性回归这样在搜索空间中对W和B进行搜索,使得模型的准确率达到某个标准,而W和B是有很多个,一般存储在矩阵中。

1.4 数据集的划分

一般分为两个部分:训练集和测试集,有的会再分验证集。训练集和测试集划分比例是7:3

1.5 机器学习算法工具包

算法工具
决策树from sklearn.tree import DecisionTreeClassifier
朴素·贝叶斯from sklearn.naive_bayes import MultinomialNB
SVMfrom sklearn.svm import SVC
KNNfrom sklearn.neighbors import KNeighborsClassifier
Adaboostfrom sklearn.ensemble import AdaBoostClassifier
K-Meansfrom sklearn.cluster import KMeans
EMfrom sklearn.mixture import GMM
Apriorifrom efficient_apriori import apriori
PageRankimport networkx as nx

2.1 推荐系统

推荐系统是一种 信息过滤 系统,根据用户的历史行为、社交关系、兴趣点给用户推荐适合他们的信息。

算法可以判断用户当前感兴趣的物品或内容。你也可以将它理解为一家只为你而开的商店。店铺里摆放的都是你需要的,或者适合你的商品。那么机器是如何帮你找到适合你的商品呢?这就要用到推荐系统,利用算法拟合用户数据,给用户推荐相关商品,类似于超市里的导购员,即可以给购物者推荐新商品,也可以帮助购物者找到商品的位置。推荐系统主要是前者,推荐商品。

推荐系统主要分为两种,一种是基于内容属性推荐(Content-based Filtering),根据物品的属性为他们打上标签,再通过这些标签计算他们之间的相似度;另外一种是基于其他用户行为推荐(Collaborative Filtering),协同过滤就是通过数据找到与你相似的用户,通过他们的行为和他们喜欢的内容。为你推荐你可能感兴趣的物品或内容。在日常生活中,我们也会找到兴趣相同的朋友来帮我们推荐电影或者音乐。

在推荐系统中,Using data重在“相似度”,Solve problems在于“推荐”。物品本身:Content-based基于物品本身的内容,而不是用户购买/浏览物品的行为。用户行为的可以分为两种,显示反馈数据和隐形反馈数据。

  1. 显性反馈数据:用户明确表示对物品的喜欢行为:评分,喜欢,收藏,购买
  2. 隐性反馈数据:不能明确反映用户喜好的行为:浏览,停留时间,点击

相似和推断是推荐系统中两个比较重要的概念,下面我们来解释下相似和推断之间的联系与定义:
推荐系统相似性
“相似”,简单的讲就是找到和你相似的集体,如何评判“相似”呢?从内容和用户两个点,出发与思考,分为User-based和Item-based。User-based,两个人共同喜欢的东西越多,那么两个人就越相似;Item-based,两个物品共同喜欢的人越多,这两个物品就越相似。

有了相似度,我们就要开始给用户推荐适合他们的商品,也是两个方面,UserCF和ItemCF。UserCF,和你兴趣相投的用户,推荐他们喜欢的商品。ItemCF,给用户推荐那些和他们之前喜欢的物品相似的物品。(ItemCF不利用物品的内容属性计算物品之间的相似度,主要通过分析用户的行为记录计算物品之间的相似度)。

计算相似度,进行推荐,需要大量的数据,在早期我们没有数据,不能分析用户行为,我们该如何解决?通过几次试验,刻画出新用户心中对每个Topic的感兴趣概率。如果用户对推荐的某个Topic感兴趣,就代表获得了收益。否则就表示遗憾。通过“选择-观察-更新-选择”的循环,将收益最大化。如果探索失败,会损失掉这部分用户,从而用户不再使用这个网站,APP。所以有的公司会对新用户进行问卷调查,问客户喜欢什么?太直接的方式,会带来更坏的结果,提供一个页面,请用户选择喜欢的内容,初步判断用户喜欢这些内容,推送这些内容。用户点击与浏览数量增加之后,做细致的分析。

推荐系统有两个经典的问题:EE(Exploitation & Exploration)和冷启动问题。

EE(Exploitation & Exploration):

  • Exploitation:选择现在可能最佳的方案
  • Exploration:选择现在不确定的,但未来可能会有高效益的方案

日常生活中,很多场景都可以看作EE问题,比如我和女朋友约会,喊她一起出去吃饭,我脑子里想着今天晚上去哪里吃饭好呢?带她去上次那家西式餐厅,那家的土耳其菜还是很不错的。但我看她今天有点不开心,附近,最近新开了一家餐厅要不要带她去?Exploitation 方案,去最喜欢的餐厅,而Exploration方案,尝试新餐厅。

打开手机,搜索“2020 双十一 日系新品衣服”,Exploitation 方案呈现的结果都是“衣服”,而Exploration方案呈现的结果可能有“衣服”可能还有搭配的“裤子”、“裙子”。
在这里插入图片描述

综上:其实EE问题就是涉及到准确性和多样性的平衡问题。我们要怎样在保障准确性的同时增加推荐的多样性呢?

针对此问题,Bandit算法可以较好的解决。

2.2 Bandit算法

Bandit算法来源于历史悠久的赌博学,假想这样的场景:
在多台单臂老虎机面前(假设每台老虎机的吐钱的概率不同),赌徒如何在一系列的试玩中,选择其中一台,从而获得最大的回报。在这个问题中,如果赌徒一直摇他认为收益最大的老虎机(Exploitation),他就有可能会错过收益更高的老虎机,因此可能还需要进一步探索(Exploration)。这也叫多臂赌博机问题(Multi-armed bandit problem, MAB)。
多臂老虎机
而在推荐系统中,也有很多类似的情景:

比如说:

  1. 假设遇到一个新用户,我们不知道他的喜好,该如何推荐他感兴趣的item?或者遇到一个新item,我们不知道怎样的用户会喜欢,该给哪些用户推荐?(即冷启动问题)
  2. 假设我们有若干item,我们应该给用户推荐哪些可以使得效益最大?用户留存率更高?在保障用户喜好的物品的同时,更加科学的推荐一些新颖的东西提高新颖度?(EE问题)

基于此,我们就可以将MAB的思想引入推荐系统。在介绍具体Bandit算法前先补充一个概念:

2.3 累积遗憾

赌徒的表现通常用“后悔”来衡量。而最优策略的预期收益(总是拉着最好的手臂)和赌徒的预期收益之间的差距,就是累积遗憾(regret)。
R T = ∑ i = 1 T ( w o p t − w B ( i ) ) = T w ∗ − ∑ i = 1 T w B ( i ) \begin{array}{lcr} R_T &=& \sum^T_{i=1}(w_opt - w_{B(i)})\\ &=& T_{w^*}-\sum^T_{i=1}w_{B(i)} \end{array} RT==i=1T(woptwB(i))Twi=1TwB(i)

这里我们讨论的每个臂的收益非0即1,即伯努利收益。

每次选择后,计算和最佳的选择的差距,将差距累加起来就是累积遗憾。

在上式中, w B ( i ) w_{B(i)} wB(i)是第i次试验是选中臂的期望收益,而 w ∗ w^* w是所有臂中最佳的那个。

这个公式可以用来对比不同Bandit算法的效果:对同样的多臂问题,用不同的Bandit算法试验相同次数,哪个算法的总regret增长最慢,其效果就是比较好的。

下面,我们介绍几个常用的Bandit算法:

2.3.1 朴素Bandit算法

先随机试验若干次,计算每个臂的平均收益,一直选均值最大的那个臂。

2.3.2 Epsilon-Greedy

以1-epsilon的概率选取当前收益最大的臂(Exploitation),以epsilon的概率随机选取一个臂(Exploration),即直接用epsilon控制探索(Exploration)的概率,epsilon越接近1,探索的概率越大。

  • 优点:简单粗暴
  • 缺点:探索到一定程度,已经大概知道最优的老虎机,可能就不需要那么大的epsilon探索了,即epsilon可以变小,更小的成本就可以获得更大的收益。而具体epsilon怎么选取,需要实地去调节。

2.3.3 Upper Confidence Bound(UCB)

 Upper Confidence Bound(UCB)

步骤如下:

  1. 初始化:先对每个老虎机手臂都试一遍
  2. 按照公式计算每个老虎机手臂的分数,选择分数最大的臂作为选择
    U C B = Q ( s , a ) + U ( s , a ) UCB=Q(s,a)+U(s,a) UCB=Q(s,a)+U(s,a)
    U ( s , a ) = c P ( s , a ) b N ( s , b ) 1 + N ( s , a ) U(s,a)=cP(s,a)\frac{\sqrt{_b{N(s,b)}}}{1+N(s,a)} U(s,a)=cP(s,a)1+N(s,a)bN(s,b)
  • Q(s,a)代表蒙特卡洛树中已探索的值
  • P值是先验概率,是由神经网络计算得到的值
  • N是这个action的探索次数,c用于调节探索与利用的超参数
  • 对于没有探索的action,和已经探索很多次但是探索反馈很高的action都会有较大的UCB值
  1. 观察选择结果,更新 Q ( s , a ) Q(s,a) Q(s,a) U ( s , a ) U(s,a) U(s,a)
    UCB的总体思想其实是:均值越大,标准差越小,被选中的概率会越来越大。

即它总认为探索之后的结果会比现在好,所以除了要选择收益均值最大的臂,还要看它被探索的次数。为了使得每个老虎机被探索的机会次数相当,当某个老虎机的
[公式] 越大时(即等式右边的值会越小),给它的机会会越小。

import numpy
def UCB(estimated_beta_params):
	t = float(estimated_beta_params.sum()) # total number of rounds
	totals = estimated_beta_params.sum(1) # The number of experiments per arm
	successes = estimated_beta_params[:,0]
	estimated_means = successes/totals # earnings mean
	estimated_variances = estimated_means - estimated_means**2
	UCB = estimated_means + np.sqrt(np,minimum(estimated_variances + np.sqrt(2*np.log(t)/totals), 0.25) * np.log(t)/totals)
	return np.argmax(UCB)
  1. 优点:返回的结果是固定的
  2. 缺点:计算较慢

2.3.4Thompson sampling算法

主要思想:

  1. 假设每个老虎机手臂都能产生收益的概率是p,并且p的概率分布符合beta(wins,lose)
  2. 每个老虎机手臂都维护其beta分布的参数,每次试验后,选中一个老虎机手臂摇一下,有收益的话wins+1,否则,lose+1
  3. 选择老虎机手臂的方式是:通过用每个老虎机手臂现有的beta分布产生一个随机数,选择所有老虎机手臂中随机数最大的臂去摇

np.argmax(pymc.rbeta(1 + successes , 1 + totals - successes))

  • 优点:实现相对简单,计算量较小
  • 缺点:返回的结果具有一定随机性,不是确定事件

2.4 MCTS(蒙特卡洛搜索树)

MCTS(蒙特卡洛搜索树)是一种通用博弈算法,它不需要任何有关博弈的先验知识。

MCTS是在UCB算法基础上提出的:

selection,从根节点状态出发,迭代地使用UCB算法选择最优策略,直到碰到一个叶子节点

Expansion,对叶子节点进行扩展。选择其中一个从未访问过的子节点加入当前的搜索树

Simulation,从扩展的新节点出发,进行模拟,直到博弈结束

Back-propagation,更新博弈树中所有节点的状态。进入下一轮的选择和模拟

2.5 推荐系统的目标定义

通过Exploit & Explore会给推荐系统带来惊喜度,惊喜度只是推荐系统的目标之一,从评测指标来看包括了:
在这里插入图片描述

  • 推荐系统的评价标准:
    准确度:打分系统,top N推荐
    覆盖率:对物品长尾的发掘能力
    多样性:推荐列表中物品两两之间的不相似性
    新颖度:给用户suprise
    惊喜度:推荐和用户历史兴趣不相似,缺满意的
    信任度:提供可靠的推荐理由
    实时性:实时更新程度
    了解了推荐系统的评价标准,新的问题来了,我们要选择哪个作为指标?答案是不同场景,推荐的内容不同

在这里插入图片描述

2.6 推荐系统的架构

架构是程序的整体框架,就像一个人的骨骼结构,是非常重要的。设计一个好的结构,可以减少很多不必要的麻烦,提升程序性能,提高访问效率等。
推荐系统简单的架构
推荐系统是一种信息过滤系统,主要包括这些东西:数据源,召回阶段,排序阶段
数据源:item特征,用户画像,用户行为
召回阶段:粗筛,得到候选物品集
排序阶段:对多个召回通道的内容进行打分排序,选出最优的少量结果。兼顾推荐系统的多维度指标:覆盖率,多样性,新颖度

拿用户浏览网页举例,用户打开浏览器,服务器选择当前有空闲的推荐引擎,根据用户输入的关键词,粗筛,得到候选物品集。对多个召回通道的内容进行打分排序,选出最优的少量结果,最后把结果返回到前端给用户。

在这里插入图片描述

2.7 推荐系统的适用场景

推荐系统的发明给人们带来很多便利,商家可以根据用户行为,推荐内容和商品,满足用户的需要,但是推荐的内容,大家是真的喜欢吗?什么情况下需要推荐系统,什么情况下不需要推荐系统?
一个创业项目刚开始启动,用户数在1000人,item在1万,不需要协同过滤进行推荐,会浪费大量的成本。重点是怎么把产品弄好,后面才是优化的问题。

总结

在这里插入图片描述
在这里插入图片描述

参考资料

1.推荐算法初探

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐