协同过滤
一.协同过滤的概念
1
协同过滤,英文又称Collaborative Filtering,简称CF,注意这里不是指游戏cf。
举个例子,你想和家人看场电影,但是你们都不知道看什么好,这个时候,你就会想,要不我问问身边和我兴趣差不多的伙伴有什么值得看的吧?这就是协同过滤的核心思想,即协同过滤是一种基于一组兴趣相同的用户或项目进行的推荐。
算法优点:
①协同推荐是应用最广泛的推荐算法,可以过滤掉许多人难以量化描述的概念标签的构建;
②仅使用用户行为的进行推荐,极大的提升了速度与准确度;
③可以很好地发现用户的潜在兴趣偏好。
算法缺点
①用户对商品的评价非常稀疏,而有些用户对使用过的商品根本不做评价,这样基于用户的评价所得到的用户间的相似性可能不准确;
②随着用户和物品的增多,系统的性能会越来越低,甚至会出现内存耗尽;
③对于新用户或者新物品,推荐的质量会较差,即常说的冷启动问题。
二.相似度的计算
1
在协同过滤中,相似度的计算尤为重要,因为我们过滤靠的就是相似度,相似度高的被拿来推荐,低的则被过滤。
在相似度的计算中,使用sim
来代替英文similarity
(相似度),用 s i m ( a , b ) sim(a,b) sim(a,b)来表示 a a a与 b b b的相似度。下面为两个关于相似度的经典算法。
1.余弦相似度
1
余弦定理相似性度量余弦距离是通过向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。
三角形余弦定理公式:
c o s A = b 2 + c 2 − a 2 2 b c cosA=\frac{b^{2}+c^{2}-a^{2}}{2bc} cosA=2bcb2+c2−a2
由三角形余弦定理公式可知,角 A A A越小, b , c b,c b,c两边越接近。当角 A A A为 0 0 0度时, b , c b,c b,c两边完全重合。在向量空间中,对于向量 a a a和向量 b b b满足公式:
c o s C = < a ⃗ , b ⃗ > ∣ a ⃗ ∣ ∣ b ⃗ ∣ cosC=\frac{<\vec a,\vec b>}{|\vec a||\vec b|} cosC=∣a∣∣b∣<a,b>
当 a a a和 b b b越接近(越相似)时,余弦值就越大,最大为 1 1 1。所以在比对 a a a和 b b b的相似度时,可以将其向量化后,计算它的余弦值,从而比较其相似度。即:
s i m ( a , b ) = c o s ( a ⃗ , b ⃗ ) = a ⃗ ⋅ b ⃗ ∣ a ⃗ ∣ ∣ b ⃗ ∣ sim(a,b)=cos(\vec a,\vec b)=\frac{\vec a\cdot\vec b}{|\vec a||\vec b|} sim(a,b)=cos(a,b)=∣a∣∣b∣a⋅b
类似的也可以推广到多个样本的相似性度量公式: s i m ( a , b , ) = c o s θ = x 1 y 1 + x 2 y 2 + ⋯ + x n y n x 1 2 + x 2 2 + ⋯ + x n 2 y 1 2 + y 2 2 + ⋯ + y n 2 sim(a,b,)=cosθ=\frac{x_{1}y_{1}+x_{2}y_{2}+\cdots+x_{n}y_{n}}{\sqrt{x_{1}^{2}+x_{2}^{2}+\cdots+x_{n}^{2}}\sqrt{y_{1}^{2}+y_{2} ^{2}+\cdots+y_{n}^{2}}} sim(a,b,)=cosθ=x12+x22+⋯+xn2y12+y22+⋯+yn2x1y1+x2y2+⋯+xn