協同過濾演算法是一種基於群體使用者或者物品的典型推薦演算法,也是目前常用的推薦演算法中最常用和最經典的演算法。協同過濾演算法的確認就是標準推薦演算法作為一種可行的機器推薦演算法標準步入正規。
在實際應用中,基於使用者的和基於物品的推薦演算法均是最常用的協同過濾推薦演算法。但是在某些場合下仍然具有不足之處。
首先是基於使用者的推薦演算法,針對某些熱點物品的處理不夠準確,對於一些常用的物品推薦,其計算結果往往排在推薦的首位,而這樣的推薦卻沒有實際應用意義。同時基於使用者的推薦演算法,往往資料量較為龐大,計算費事,由於熱點的存在準確度也很成問題。
d =(
x1−x
2)2+
(y1−
y2)2
d = \sqrt
d=(x1
−x2
)2+(
y1−
y2)
2幾里得相似度計算是一種基於使用者之間直線距離的計算方式。在相似度計算中,不同的物品或者使用者可以將其定義為不同的座標點,而特定目標定位為座標原點。
知道了兩個座標之間的直線距離,歐幾里得相似度也就很好計算了,與d成反比,即其相似度公式如下:
s =1
1+ds=\frac
s=1+d1
與歐幾里得距離相類似,余弦相似度也將特定目標,即物品或者使用者作為座標上的點,但不是座標原點。基於此與特定的被計算目標進行夾角計算。
c os
@=∑(
xi∗y
i)∑(
xi2)
∗∑(y
i2)cos@=\frac}
cos@=∑
(xi2
)∗∑
(yi2
)∑
(xi
∗yi
)**:
import org.apache.spark.
import scala.collection.mutable.map
object collaborativefilteringspark
//兩兩計算分值,採用余弦相似性
def getcollaboratesource(user1:
string
,user2:
string):
double=)
.reduce(_ + _)
)//進行疊加
val temp2 = math.sqrt(user2filmsource.map(num =>
).reduce(_ + _)
)//進行疊加
val denominator = temp1 * temp2 //求出分母
member / denominator //進行計算
}def main(args: array[
string])
)}}--
-------
bbb 相對於 aaa的相似性分數是:0.7089175569585667
bbb 相對於 bbb的相似性分數是:1.0000000000000002
bbb 相對於 ccc的相似性分數是:0.8780541105074453
bbb 相對於 ddd的相似性分數是:0.6865554812287477
bbb 相對於 eee的相似性分數是:0.6821910402406466
最小二乘法(ls演算法)是一種數學優化技術,他通過最小化誤差的平方和尋求資料的最佳函式匹配。利用最小二乘法可以簡便的求得未知的資料,並使得這些求得的資料與實際資料之間的誤差的平方和最小。最小二乘法還可以用於曲線擬合。
從圖中可以看到,若干個點依次分布在向量空間中,如果希望找到一條直線和這些點達到最佳匹配。那麼最簡單的方式就是希望這些點到直線的距離最小:
f (x
)=ax
+b2f(x)=ax+b^2
f(x)=a
x+b2
協同過濾 基於使用者的協同過濾itemCF
基於使用者的協同過濾演算法也被稱為最近鄰協同過濾或knn k nearest neighbor,k最近鄰演算法 其核心思想就是,首先根據相似度計算出目標使用者的鄰居集合,然後用鄰居使用者評分的加權組合來為目標使用者作推薦。通常這些演算法都可以總結成三步 首先,使用使用者已有的評分來計算使用者之間的相...
Item based協同過濾
item based top n recommendation algorithms 過程 1.構建乙個m m的矩陣,每一列最多有k個非0值,比如第j列,非0值代表和第j個item最相關的k個item。k一般10 20,不會很大,保持矩陣的稀疏性。3.上述矩陣相乘,等於是權重累加 比如使用者買過了a...
協同過濾演算法
3種形式的協同過濾 collaborative filtering 演算法 1 user based 相同 相似 使用者的喜好相同 2 item based 能夠引起使用者興趣的專案,必定與其之前評分高的專案相似 3 model based 先用歷史資料得到乙個模型,再用此模型進行 參考 這個位址是...