python-3.x - Lightfm user_features 中的功能数量不正确
问题描述
我正在构建推荐系统 - Lightfm 中的混合。我的数据有 39326 个独立用户和 2569 个独立游戏标题(项目)。我的火车交互空间矩阵的形状:<39326x2569 类型的稀疏矩阵 '<class 'numpy.float64'>' 包含 758931 个压缩稀疏行格式的存储元素> 我的测试交互空间矩阵的形状是:<39323x2569 类型的稀疏矩阵'<类 'numpy.float64'>' 以压缩稀疏行格式存储 194622 个元素>
我训练模型:model1 = LightFM(learning_rate=0.01, loss='warp') model1.fit(train_interactions, epochs
=20) 创建对象:<lightfm.lightfm.LightFM at 0x1bf8c8dc4c8> 但是当我尝试通过以下方式检查准确性时: train_precision = precision_at_k(model1, train_interactions, k=10).mean() test_precision = precision_at_k(model1, test_interactions, k=10).mean()
我收到错误消息:user_features 中的功能数量不正确 为什么???显然形状是兼容的?我错过了什么?
解决方案
您的测试稀疏矩阵的维度为 39323x2569,而您的训练稀疏矩阵的维度为 39326x2569。您的测试集中缺少 3 个用户。
我建议您使用 lightfm 内置的训练/测试拆分功能来避免错误:https ://making.lyst.com/lightfm/docs/cross_validation.html
如果您想以自己的方式拆分数据,还可以将 user_id 和 item_id 转换为从 0 开始的连续整数。然后使用:
from lightfm.data import Dataset
# Create your train and test set in the format [[user_id1, item_id1, score1], ..., [user_idn, item_idn, scoren]]
# Your score can be just 1 for an implicit interaction
# user_id and item_id are integers
data = Dataset()
data.fit(unique_user_ids, # list from 0 to n_users
unique_item_ids # list from 0 to n_items
)
train, weights_matrix = data.build_interactions([tuple(i) for i in train])
test, weights_matrix = data.build_interactions([tuple(i) for i in test])
推荐阅读
- powershell - 如何解决运行 Invoke-sqlcmd 命令以使用 Invoke-SQLCMD 和 Powershell 6 连接到 Azure Datawarehouse 的错误?
- mysql - 使用 JOIN 在重复值上查询 sql SUM 仅 1 个值
- c - 如何在 C 函数中分配三重指针的内存
- c - 这个空字符打印的输出是什么?
- javascript - Razor 视图模型绑定使用 javascript 函数
- python - Lxml xpath 返回一个空数组
- javascript - 棱镜部署与 SQLSyntaxError
- r - 如何将一个矩阵的每一行与R中的另一个矩阵相乘?
- c# - 使用c#检查给定密码中0-9之间的至少1个数字
- tfs - 是否可以通过 TFS 客户端库管理 PAT?