我正在尝试为我的项目实现用户-用户协同过滤算法。下面的代码适用于非常小的数据集,但在 yelp 数据集(100 万用户 200k 产品)上运行它时,它在使用 unstack 的行上给出了索引错误。它可以正确读取和打印庞大的数据集,但不会对其进行拆分。输入是一个包含用户、产品和相关评级的数据集。输出必须是计算出的预测。
我在 stackoverflow 上发现了许多其他问题来解决这个问题,但它们与 Python 的 unstack 操作无关。我尝试了替代方案,例如不使用 unstack 并单独使用 groupby 进行所有操作,但这是不可行的。我不知道如何解决这个问题。
import pandas as pd;
from math import *;
df = pd.read_csv('preprocessed.csv', names ['users','Products','stars'],low_memory=False)
s = df.groupby(['users', 'Products']).sum()
m = s.unstack(fill_value=0.0)
print(m)
输出:
stars
Products product1 product2 product3
users
user1 1.0 0.0 4.0
user2 1.0 3.0 0.0
user3 1.0 0.0 0.0
user4 0.0 0.0 3.0
Predicted ratings
stars
Products product1 product2 product3
users
user1 1.0 0.115504 4.000000
user2 1.0 3.000000 1.489822
user3 1.0 0.478533 0.521467
user4 1.5 0.500000 3.000000
请您参考如下方法:
当我拆开一个大的 groupby 系列时,我遇到了和你一样的问题。问题来自没有足够的内存。因此,最好的解决方案是使用更大的 RAM 机器来运行您的计算。
