推荐算法小结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐算法小结相关的知识,希望对你有一定的参考价值。
参考技术A 输入 :与用户相关的包含众多特征(feature)的数据:用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。
输出 :推荐给用户的功能列表(根据得分高低排序)
函数 : 传统算法 、 机器学习算法 (Machine Learning)、 深度学习算法 (Deep Learning)
基于流行度的算法非常简单粗暴,类似于各大新闻、微博热榜等,根据VV、UV、日均PV或分享率等数据来按某种热度(加权)排序来推荐给用户。
访问次数 (VV):记录1天内所有访客访问了该网站多少次,相同的访客有可能多次访问该网站,且访问的次数累加。
独立访客 (UV):记录1天内所有访客访问了该网站多少次,虽然相同访客能多次访问网站,但只计算为1个独立访客。
PV访问量 (Page View):即页面访问量,每打开一次页面或者刷新一次页面,PV值+1。
优点:该算法简单,适用于刚注册的新用户
缺点:无法针对用户提供个性化的推荐
改进:基于该算法可做一些优化,例如加入用户分群的流行度进行排序,通过把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。
基于用户的协同过滤推荐算法 (UserCF):针对目标用户(A),先通过兴趣、爱好或行为习惯找到与他相似的“其他用户”(BCD...),然后把BCD...喜欢的并且A没有浏览过的物品或功能推给A。
基于物品的协同过滤推荐算法 (ItemCF):例如由于我之前看过张艺谋导演的《英雄》这部电影,会给我推荐《红高粱》、《归来》等同导演电影。
1)分析各个用户对物品的评价,通过浏览记录、购买记录等得到用户的隐性评分;
2)根据用户对物品的隐性评分计算得到所有用户之间的相似度;
3)选出与目标用户最相似的K个用户;
4)将这K个用户隐性评分最高并且目标用户又没有浏览过的物品推荐给目标用户。
优点:
基于用户的协同过滤推荐算法是给目标用户推荐那些和他有共同兴趣的用户喜欢的物品,所以该算法推荐较为社会化,即推荐的物品是与用户兴趣一致的那个群体中的热门物品;
适于物品比用户多、物品时效性较强的情形,否则计算慢;
能实现跨领域、惊喜度高的结果。
缺点:
在很多时候,很多用户两两之间的共同评分仅有几个,也即用户之间的重合度并不高,同时仅有的共同打了分的物品,往往是一些很常见的物品,如票房大片、生活必需品;
用户之间的距离可能变得很快,这种离线算法难以瞬间更新推荐结果;
推荐结果的个性化较弱、较宽泛。
改进:
两个用户对流行物品的有相似兴趣,丝毫不能说明他们有相似的兴趣,此时要增加惩罚力度;
如果两个用户同时喜欢了相同的物品,那么可以给这两个用户更高的相似度;
在描述邻居用户的偏好时,给其最近喜欢的物品较高权重;
把类似地域用户的行为作为推荐的主要依据。
1)分析各个用户对物品的浏览记录;
2)依据浏览记录分析得出所有物品之间的相似度;
3)对于目标用户评价高的物品,找出与之相似度最高的K个物品;
4)将这K个物品中目标用户没有浏览过的物品推荐给目标用户
优点:
基于物品的协同过滤推荐算法则是为目标用户推荐那些和他之前喜欢的物品类似的物品,所以基于物品的协同过滤推荐算法的推荐较为个性,因为推荐的物品一般都满足目标用户的独特兴趣。
物品之间的距离可能是根据成百上千万的用户的隐性评分计算得出,往往能在一段时间内保持稳定。因此,这种算法可以预先计算距离,其在线部分能更快地生产推荐列表。
应用最广泛,尤其以电商行业为典型。
适于用户多、物品少的情形,否则计算慢
推荐精度高,更具个性化
倾向于推荐同类商品
缺点:
不同领域的最热门物品之间经常具有较高的相似度。比如,基于本算法,我们可能会给喜欢听许嵩歌曲的同学推荐汪峰的歌曲,也就是推荐不同领域的畅销作品,这样的推荐结果可能并不是我们想要的。
在物品冷启动、数据稀疏时效果不佳
推荐的多样性不足,形成信息闭环
改进:
如果是热门物品,很多人都喜欢,就会接近1,就会造成很多物品都和热门物品相似,此时要增加惩罚力度;
活跃用户对物品相似度的贡献小于不活跃的用户;
同一个用户在间隔很短的时间内喜欢的两件商品之间,可以给予更高的相似度;
在描述目标用户偏好时,给其最近喜欢的商品较高权重;
同一个用户在同一个地域内喜欢的两件商品之间,可以给予更高的相似度。
(相似度计算:余弦相似度、Jaccard系数、皮尔森相关系数等)
常见经典 ML 分类算法:
逻辑回归 (Logistics Regression)
支持向量机 (SVM)
随机森林 (Random Forest)
提升类算法 (Boosting):Adaboost、GBDT、XGboost
一般处理流程:数据处理 -> 特征工程 -> 模型选择 -> 交叉验证 -> 模型选择与模型融合
特征清洗 :剔除不可信样本,缺省值极多的字段不予考虑
特征预处理 :单个特征(归一化,离散化,缺失值补全,数据变换),多个特征(PCA/LDA降维,特征选择)
使用工具 :pandas(python开源库)
模型选择与模型融合 :根据交叉验证得分选择前几名模型,然后进行模型融合(Bagging、Boosting、Stacking)
DL 优势 :ML 中特征工程是十分重要并且要根据行业经验确定,DL 可以自己从数据中学习特征。DL 能自动对输入的低阶特征进行组合、变换,得到高阶特征。对于公司产品应用领域来说,用户的注册信息(职业、年龄、性别等 显信息),行为信息(使用功能、有效使用时长等 隐信息)。这些就可以作为低阶特征输入。
RNN系列 (处理文本数据)
CNN系列 (处理图像数据)
DNN (处理一般性分类)
机器学习聚类算法
目录
1 认识聚类算法
使用不同的聚类准则,产生的聚类结果不同。
1.1 聚类算法在现实中的应用
- 用户画像,广告推荐,Data Segmentation,搜索引擎的流量推荐,恶意流量识别
- 基于位置信息的商业推送,新闻聚类,筛选排序
- 图像分割,降维,识别;离群点检测;信用卡异常消费;发掘相同功能的基因片段
1.2 聚类算法的概念
聚类算法:
一种典型的无监督学习算法,主要用于将相似的样本自动归到一个类别中。
在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。
1.3 聚类与分类最大的区别
聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。
1.4 小结
- 聚类算法分类【了解】
- 粗聚类
- 细聚类
- 聚类的定义【了解】
- 一种典型的无监督学习算法,
- 主要用于将相似的样本自动归到一个类别中
- 计算样本和样本之间的相似性,一般使用欧式距离
2 聚类算法api初步使用
2.1 api介绍
- sklearn.cluster.KMeans(n_clusters=8)
- 参数:
- n_clusters:开始的聚类中心数量
- 整型,缺省值=8,生成的聚类数,即产生的质心(centroids)数。
- n_clusters:开始的聚类中心数量
- 方法:
- estimator.fit(x)
- estimator.predict(x)
- estimator.fit_predict(x)
- 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)
- 参数:
2.2 案例
随机创建不同二维数据集作为训练集,并结合k-means算法将其聚类,你可以尝试分别聚类不同数量的簇,并观察聚类效果:
聚类参数n_cluster传值不同,得到的聚类结果不同
2.2.1流程分析
2.2.2 代码实现
1.创建数据集
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabaz_score
# 创建数据集
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,
# 簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
cluster_std=[0.4, 0.2, 0.2, 0.2],
random_state=9)
# 数据集可视化
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()
2.使用k-means进行聚类,并使用CH方法评估
y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)
# 分别尝试n_cluses=2\\3\\4,然后查看聚类效果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
# 用Calinski-Harabasz Index评估的聚类分数
print(calinski_harabaz_score(X, y_pred))
2.3 小结
- api:sklearn.cluster.KMeans(n_clusters=8)【知道】
- 参数:
- n_clusters:开始的聚类中心数量
- 方法:
- estimator.fit_predict(x)
- 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)
- estimator.fit_predict(x)
- 参数:
3 聚类算法实现流程
3.1 k-means聚类步骤
- 1、随机设置K个特征空间内的点作为初始的聚类中心
- 2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
- 3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
- 4、如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程
通过下图解释实现流程:
k聚类动态效果图
3.2 案例练习
- 案例:
- 1、随机设置K个特征空间内的点作为初始的聚类中心(本案例中设置p1和p2)
2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别
3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)
4、如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程【经过判断,需要重复上述步骤,开始新一轮迭代】
5、当每次迭代结果不变时,认为算法收敛,聚类完成,K-Means一定会停下,不可能陷入一直选质心的过程。
3.3 小结
-
K-means聚类实现流程
【掌握】
-
事先确定常数K,常数K意味着最终的聚类类别数;
-
随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,
-
接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,
-
最终就确定了每个样本所属的类别以及每个类的质心。
-
注意
:
- 由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。
-
以上是关于推荐算法小结的主要内容,如果未能解决你的问题,请参考以下文章