1. 程式人生 > >用戶相似度計算

用戶相似度計算

計算 使用 val PE 相似度 ID turn 稀疏 code

協同過濾中用戶距離計算

# 構建共同的評分向量
def build_xy(user_id1, user_id2):
    bool_array = df.loc[user_id1].notnull() & df.loc[user_id2].notnull()
    return df.loc[user_id1, bool_array], df.loc[user_id2, bool_array]
# 歐幾裏德距離
def euclidean(user_id1, user_id2):
    x, y = build_xy(user_id1, user_id2)
    try:
        value 
= sum((x - y)**2)**0.5 except ZeroDivisionError: value = 0 return value # 余弦相似度 def cosine(user_id1, user_id2): x, y = build_xy(user_id1, user_id2) # 分母 denominator = (sum(x*x)*sum(y*y))**0.5 try: value = sum(x*y)/denominator except ZeroDivisionError: value
= 0 return value # 皮爾遜相關系數 def pearson(user_id1, user_id2): x, y = build_xy(user_id1, user_id2) mean1, mean2 = x.mean(), y.mean() # 分母 denominator = (sum((x-mean1)**2)*sum((y-mean2)**2))**0.5 try: value = sum((x - mean1) * (y - mean2)) / denominator except ZeroDivisionError: value
= 0 return value
# 1.如果數據密集(所有數據幾乎都有屬性值,屬性值量級重要),就用歐幾裏德算法
# 2.數據受級別膨脹影響(不同的用戶使用不同的評分標準),就用皮爾遜相關系數算法
# 3.數據稀疏性強,就考慮用夾角余弦相似度算法

用戶相似度計算