如何使用scikit的Surprise做出预测?

谁的男孩

我在理解Surprise工作流的方式时遇到了一些麻烦。我有一个用于训练的文件(我试图将其分为训练和验证),以及一个用于测试数据的文件。我无法理解Surprise Dataset和Trainset之间的区别

# Import data
data_dir = 'DIRECTORY_NAME'
reader = Reader(rating_scale=(1, 5))

# Create pandas dataframes
train_valid_df = pd.read_csv(os.path.join(data_dir, 'TRAINING_FILENAME.csv'))
train_df, valid_df = train_test_split(train_valid_df, test_size=0.2)
test_df = pd.read_csv(os.path.join(data_dir, 'TEST_FILENAME.csv'))

# Create surprise Dataset objects
train_valid_Dataset = Dataset.load_from_df(train_valid_df[['user_id', 'item_id', 'rating']], reader)
train_Dataset = Dataset.load_from_df(train_df[['user_id', 'item_id', 'rating']], reader)
valid_Dataset = Dataset.load_from_df(valid_df[['user_id', 'item_id', 'rating']], reader)
test_Dataset = Dataset.load_from_df(test_df[['user_id', 'item_id', 'rating']], reader)

# Create surprise Trainset object (and testset object?)
train_Trainset = train_data.build_full_trainset()
valid_Testset = trainset.build_anti_testset()

然后,创建我的预测变量:

algo = KNNBaseline(k=60, min_k=2, sim_options={'name': 'msd', 'user_based': True})

现在,如果我想交叉验证,我会做

cross_v = cross_validate(algo, all_data, measures=['mae'], cv=10, verbose=True)

哪个训练模型(?),但是如果我想使用固定的验证集,该怎么办?这个:?

algo.fit(train_Trainset)

完成此操作后,我试图获得一些预测:

predictions = algo.test(valid_Testset)
print(predictions[0])

结果就是这样,在此处输入图片说明但是当我尝试使用项目和用户ID号进行预测时,它说这样的预测是不可能的:

print(algo.predict('13', '194'))
print(algo.predict('260', '338'))
print(algo.predict('924', '559'))

屈服: 在此处输入图片说明

第一个用户/项对来自训练反集,第二对来自验证集,第三对来自训练集。我不知道为什么会这样,而且我发现文档有时会令人困惑。同样,许多在线教程似乎都是针对熊猫数据框进行训练的,但我会因此而出错。谁能澄清惊奇的工作流程实际上是什么样的?如何训练测试集并做出预测?

谢谢!

笨狼

希望这对您有所帮助,因为您需要进行单独的培训和测试,所以我们创建的数据类似于您的数据:

from surprise import Dataset, KNNBaseline, Reader
import pandas as pd
import numpy as np
from surprise.model_selection import cross_validate
reader = Reader(rating_scale=(1, 5))

train_df = pd.DataFrame({'user_id':np.random.choice(['1','2','3','4'],100),
                         'item_id':np.random.choice(['101','102','103','104'],100),
                         'rating':np.random.uniform(1,5,100)})

valid_df = pd.DataFrame({'user_id':np.random.choice(['1','2','3','4'],100),
                         'item_id':np.random.choice(['101','102','103','104'],100),
                         'rating':np.random.uniform(1,5,100)})

然后,我们需要将训练数据转换为surprise.trainset,类似于您所做的:

train_Dataset = Dataset.load_from_df(train_df[['user_id', 'item_id', 'rating']], reader)
valid_Dataset = Dataset.load_from_df(valid_df[['user_id', 'item_id', 'rating']], reader)

train_Dataset = train_Dataset.build_full_trainset()

对于拟合,您只需要train_Dataset,对于交叉验证,我不确定您要做什么,并且我认为这超出了预测的范围,因此我们适合:

algo = KNNBaseline(k=60, min_k=2, sim_options={'name': 'msd', 'user_based': True})
algo.fit(train_Dataset)

为了进行预测,您需要以列表或数组的形式提供输入,其形状与您的输入相同,因此,例如,如果我们要提供测试数据集,则将是:

testset = [valid_Dataset.df.loc[i].to_list() for i in range(len(valid_Dataset.df))]
algo.test(testset)[:2] 

[Prediction(uid='2', iid='103', r_ui=3.0224818872683845, est=2.8486558674146125, details={'actual_k': 25, 'was_impossible': False}),
 Prediction(uid='2', iid='103', r_ui=4.609064535195377, est=2.8486558674146125, details={'actual_k': 25, 'was_impossible': False})]

如果要测试一个或两个值,它将是:

algo.test([['1','101',None]])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用 scikit learn 预测目标标签

来自分类Dev

使用Tensorflow做出预测遗失参数

来自分类Dev

如何使用GridSearchCV输出进行scikit预测?

来自分类Dev

如何使用scikit-learn评估预测的置信度得分

来自分类Dev

如何对这个训练有素的模型做出预测?

来自分类Dev

使用Scikit-Learn的SVR,您如何结合分类和连续功能来预测目标?

来自分类Dev

在使用scikit-learn测试多类svm时,如何找到预测的置信度?

来自分类Dev

如何在Scikit学习中使用OneVsRestClassifier分析使用多类分类预测每个单独类的性能?

来自分类Dev

如何在scikit-learn中预测时间序列?

来自分类Dev

scikit-learn:如何缩减“ y”预测结果

来自分类Dev

Scikit-Learn:如何检索KFold CV的预测概率?

来自分类Dev

使用scikit-learn预测有趣的文章

来自分类Dev

使用scikit确定每个功能对特定类别预测的贡献

来自分类Dev

Scikit-Learn:使用DBSCAN预测新点

来自分类Dev

使用scikit-learn的Imputer模块预测缺失值

来自分类Dev

使用scikit-learn预测电影评论

来自分类Dev

保留TFIDF结果以使用Scikit for Python预测新内容

来自分类Dev

使用scikit-learn预测单个值会导致ValueError

来自分类Dev

使用scikit-learn预测有趣的文章

来自分类Dev

使用scikit-learn预测电影评论

来自分类Dev

如何通过我的Keras神经网络一次做出单个预测

来自分类Dev

scikit中的RBM预测

来自分类Dev

scikit从coef_学习预测

来自分类Dev

scikit:这种情况的错误预测

来自分类Dev

Scikit学习和数据虚拟化:为什么在使用预测时必须使用ravel?

来自分类Dev

如何使用Torch7进行预测

来自分类Dev

如何使用Pybrain预测新数据?

来自分类Dev

如何使用ML sklearn管道进行预测?

来自分类Dev

如何使用pybrain权重进行预测

Related 相关文章

  1. 1

    如何使用 scikit learn 预测目标标签

  2. 2

    使用Tensorflow做出预测遗失参数

  3. 3

    如何使用GridSearchCV输出进行scikit预测?

  4. 4

    如何使用scikit-learn评估预测的置信度得分

  5. 5

    如何对这个训练有素的模型做出预测?

  6. 6

    使用Scikit-Learn的SVR,您如何结合分类和连续功能来预测目标?

  7. 7

    在使用scikit-learn测试多类svm时,如何找到预测的置信度?

  8. 8

    如何在Scikit学习中使用OneVsRestClassifier分析使用多类分类预测每个单独类的性能?

  9. 9

    如何在scikit-learn中预测时间序列?

  10. 10

    scikit-learn:如何缩减“ y”预测结果

  11. 11

    Scikit-Learn:如何检索KFold CV的预测概率?

  12. 12

    使用scikit-learn预测有趣的文章

  13. 13

    使用scikit确定每个功能对特定类别预测的贡献

  14. 14

    Scikit-Learn:使用DBSCAN预测新点

  15. 15

    使用scikit-learn的Imputer模块预测缺失值

  16. 16

    使用scikit-learn预测电影评论

  17. 17

    保留TFIDF结果以使用Scikit for Python预测新内容

  18. 18

    使用scikit-learn预测单个值会导致ValueError

  19. 19

    使用scikit-learn预测有趣的文章

  20. 20

    使用scikit-learn预测电影评论

  21. 21

    如何通过我的Keras神经网络一次做出单个预测

  22. 22

    scikit中的RBM预测

  23. 23

    scikit从coef_学习预测

  24. 24

    scikit:这种情况的错误预测

  25. 25

    Scikit学习和数据虚拟化:为什么在使用预测时必须使用ravel?

  26. 26

    如何使用Torch7进行预测

  27. 27

    如何使用Pybrain预测新数据?

  28. 28

    如何使用ML sklearn管道进行预测?

  29. 29

    如何使用pybrain权重进行预测

热门标签

归档