Implementing a collaborative filtering algorithm based on matrix factorization.

Matrix Factorization is a commonly used Collaborative Filtering (CF) algorithm, often utilized in recommendation systems. Below is an implementation example of a CF algorithm based on matrix factorization.

import numpy as np

class MatrixFactorizationCF:
    def __init__(self, num_users, num_items, num_factors=10, learning_rate=0.01, reg_param=0.01, num_iterations=100):
        self.num_users = num_users
        self.num_items = num_items
        self.num_factors = num_factors
        self.learning_rate = learning_rate
        self.reg_param = reg_param
        self.num_iterations = num_iterations
        self.user_factors = None
        self.item_factors = None
    
    def fit(self, train_data):
        # 初始化用户和物品的隐因子矩阵
        self.user_factors = np.random.normal(scale=1./self.num_factors, size=(self.num_users, self.num_factors))
        self.item_factors = np.random.normal(scale=1./self.num_factors, size=(self.num_items, self.num_factors))
        
        for iteration in range(self.num_iterations):
            for user_id, item_id, rating in train_data:
                error = rating - self.predict(user_id, item_id)
                
                # 更新用户和物品的隐因子矩阵
                self.user_factors[user_id] += self.learning_rate * (error * self.item_factors[item_id] - self.reg_param * self.user_factors[user_id])
                self.item_factors[item_id] += self.learning_rate * (error * self.user_factors[user_id] - self.reg_param * self.item_factors[item_id])
    
    def predict(self, user_id, item_id):
        return np.dot(self.user_factors[user_id], self.item_factors[item_id])

Example of use:

# 创建一个矩阵分解的CF模型
cf_model = MatrixFactorizationCF(num_users=100, num_items=50, num_factors=10, learning_rate=0.01, reg_param=0.01, num_iterations=100)

# 使用训练数据训练模型
train_data = [(0, 0, 5), (1, 1, 3), (2, 2, 4), ...]
cf_model.fit(train_data)

# 预测用户0对物品1的评分
user_id = 0
item_id = 1
predicted_rating = cf_model.predict(user_id, item_id)
print("Predicted rating for user", user_id, "and item", item_id, ":", predicted_rating)

The above example illustrates how to use matrix factorization-based CF algorithm to predict ratings of users on items. In the fit method, the hidden factor matrices of users and items are iteratively optimized to approximate the actual rating data. Then, the predict method is used to predict ratings of users on items.

bannerAds