- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的数据集上使用了 LightFM 推荐库,它给出了下图中的结果。
NUM_THREADS = 4
NUM_COMPONENTS = 30
NUM_EPOCHS = 5
ITEM_ALPHA = 1e-6
LEARNING_RATE = 0.005
LEARNING_SCHEDULE = 'adagrad'
RANDOM_SEED = 29031994
warp_model = LightFM(loss='warp',
learning_rate=LEARNING_RATE,
learning_schedule=LEARNING_SCHEDULE,
item_alpha=ITEM_ALPHA,
no_components=NUM_COMPONENTS,
random_state=RANDOM_SEED)
bpr_model = LightFM(loss='bpr',
learning_rate=LEARNING_RATE,
learning_schedule=LEARNING_SCHEDULE,
item_alpha=ITEM_ALPHA,
no_components=NUM_COMPONENTS,
random_state=RANDOM_SEED)
最佳答案
您可以在 sklearn docs 中找到有关超参数优化的一般指南。
一种可用于优化 LightFM 模型的简单但有效的技术是 random search 。粗略地说,它包括以下步骤:
['warp', 'bpr', 'warp-kos']
统一采样。 import itertools
import numpy as np
from lightfm import LightFM
from lightfm.evaluation import auc_score
def sample_hyperparameters():
"""
Yield possible hyperparameter choices.
"""
while True:
yield {
"no_components": np.random.randint(16, 64),
"learning_schedule": np.random.choice(["adagrad", "adadelta"]),
"loss": np.random.choice(["bpr", "warp", "warp-kos"]),
"learning_rate": np.random.exponential(0.05),
"item_alpha": np.random.exponential(1e-8),
"user_alpha": np.random.exponential(1e-8),
"max_sampled": np.random.randint(5, 15),
"num_epochs": np.random.randint(5, 50),
}
def random_search(train, test, num_samples=10, num_threads=1):
"""
Sample random hyperparameters, fit a LightFM model, and evaluate it
on the test set.
Parameters
----------
train: np.float32 coo_matrix of shape [n_users, n_items]
Training data.
test: np.float32 coo_matrix of shape [n_users, n_items]
Test data.
num_samples: int, optional
Number of hyperparameter choices to evaluate.
Returns
-------
generator of (auc_score, hyperparameter dict, fitted model)
"""
for hyperparams in itertools.islice(sample_hyperparameters(), num_samples):
num_epochs = hyperparams.pop("num_epochs")
model = LightFM(**hyperparams)
model.fit(train, epochs=num_epochs, num_threads=num_threads)
score = auc_score(model, test, train_interactions=train, num_threads=num_threads).mean()
hyperparams["num_epochs"] = num_epochs
yield (score, hyperparams, model)
if __name__ == "__main__":
from lightfm.datasets import fetch_movielens
data = fetch_movielens()
train = data["train"]
test = data["test"]
(score, hyperparams, model) = max(random_search(train, test, num_threads=2), key=lambda x: x[0])
print("Best score {} at {}".format(score, hyperparams))
关于optimization - 如何优化 LightFM 的超参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49896816/
我在我的数据集上使用了 LightFM 推荐库,它给出了下图中的结果。 NUM_THREADS = 4 NUM_COMPONENTS = 30 NUM_EPOCHS = 5 ITEM_ALPHA =
我尝试使用下面的代码加载 movie_lens 数据集 从 lightfm.datasets 导入 fetch_movielens 运行这个我得到:ImportError:没有名为“lightfm.d
我一直在研究 lightfm很长一段时间,发现生成建议真的很有用。但是,我想知道两个主要问题。 在推荐等级很重要的情况下评估 LightFM 模型,我应该更多地依赖 precision@k 或其他提供
我目前正在使用一个名为 LightFM 的 Python 库。但是我在将交互传递给 fit() 方法时遇到了一些问题。 Python 版本:3图书馆:http://lyst.github.io/lig
我希望深入了解 LightFM 实现的以下权重: 样本权重 什么是sample_weights在 fit方法?我读到它们是为了模拟时间衰减,但这究竟是如何工作的?解释这一点的示例或文章将非常有帮助。
我记得 lightfm 的优点之一是模型没有冷启动问题,用户和项目都冷启动:lightfm original paper 但是,我仍然不明白如何使用lightfm 来解决冷启动问题。我在 user-i
tl;dr:使用 Yelp 数据集制作推荐系统,但遇到测试交互矩阵和训练交互矩阵共享 68 个交互。这将导致不正确的评估,请检查您的数据拆分。运行以下 LightFM 代码时出错。 test_auc
我是一名优秀的程序员,十分优秀!