用ALS算法代码对my.csv中的数据进行推荐,并计算RMSE
时间: 2024-03-27 21:36:06 浏览: 83
首先,我们需要读取 `my.csv` 文件并将数据转换为用户-物品评分矩阵 `R`,其中 `R[i, j]` 表示用户 `i` 对物品 `j` 的评分。假设文件中包含 `n_users` 个用户和 `n_items` 个物品,则可以使用以下代码:
```python
import numpy as np
# Load data from CSV file.
data = np.loadtxt('my.csv', delimiter=',')
user_ids = data[:, 0].astype(int) - 1
item_ids = data[:, 1].astype(int) - 1
ratings = data[:, 2]
# Create user-item rating matrix.
n_users = np.max(user_ids) + 1
n_items = np.max(item_ids) + 1
R = np.zeros((n_users, n_items))
for i in range(len(user_ids)):
R[user_ids[i], item_ids[i]] = ratings[i]
```
接下来,我们可以使用上面的 `als` 函数来训练模型并计算RMSE:
```python
# Split data into training and test sets.
np.random.seed(123)
mask = np.random.rand(len(ratings)) < 0.8
R_train = np.zeros((n_users, n_items))
R_test = np.zeros((n_users, n_items))
R_train[user_ids[mask], item_ids[mask]] = ratings[mask]
R_test[user_ids[~mask], item_ids[~mask]] = ratings[~mask]
# Train model using ALS algorithm.
K = 10
max_iter = 10
lambda_ = 0.1
U, V = als(R_train, K, max_iter, lambda_)
# Predict ratings for test set.
R_pred = np.dot(U, V.T)
R_pred[R_train > 0] = 0
# Compute RMSE.
mse = np.sum((R_pred - R_test) ** 2) / np.sum(R_test > 0)
rmse = np.sqrt(mse)
print('RMSE:', rmse)
```
上面的代码将数据集分成了训练集和测试集,使用训练集训练了模型,然后使用测试集计算了 RMSE。你可以根据需要调整参数 `K`、`max_iter` 和 `lambda_`,以获得更好的结果。
阅读全文