我有一个来自movielens数据集的互动矩阵(scipy.sparse.csr_matrix),其中包含用户对电影的评分,我正在使用item_features构建一个LightFM模型。现在,我将矩阵划分为训练和测试,但如何对其进行交叉验证?我如何衡量效率?
!pip install lightfm
from lightfm import LightFM, cross_validation
from lightfm.evaluation import precision_at_k, auc_score
train, test = cross_validation.random_train_test_split(user_item, test_percentage=0.25)
model_lightfm = LightFM(loss='warp', learning_rate=0.01, k=10)
model_lightfm.fit(train, item_features=item_features, epochs=50)
def recommend(model, user_id):
n_users, n_items = train.shape
best_rated = ratings_df[(ratings_df.userId == user_id) & (ratings_df.rating >= 4.5)].movieId.values
known_positives = metadata.loc[metadata['MOVIEID'].isin(best_rated)].title_clean.values
scores = model.predict(user_id, np.arange(n_items), item_features=item_features)
top_items = metadata['title_clean'][np.argsort(-scores)]
print("User %s likes:" % user_id)
for k in known_positives[:10]:
print(k)
print("\nRecommended:")
for x in top_items[:10]:
print(x)
recommend(model_lightfm, 10)
train_precision = precision_at_k(model_lightfm, train, k=10, item_features=item_features).mean()
test_precision = precision_at_k(model_lightfm, test, k=10, item_features=item_features, train_interactions=train).mean()
train_auc = auc_score(model_lightfm, train, item_features=item_features).mean()
test_auc = auc_score(model_lightfm, test, item_features=item_features, train_interactions=train).mean()
print('Precision: train %.2f, test %.2f.' % (train_precision, test_precision))
print('AUC: train %.2f, test %.2f.' % (train_auc, test_auc))发布于 2020-06-02 19:52:57
lightFM可用的评估指标是精确度和精度@k。您正在计算指标精确度和auc_score。可以通过查看以下内容来判断模型的效率
时判断您的模型,这将很有帮助
https://stackoverflow.com/questions/61695989
复制相似问题