如何在“惊喜”Python 推荐系统中加载 CSV 文件而不是内置数据集?

问题描述

在这个将数据集评估为推荐系统的示例中,我不知道如何编写代码来加载 CSV 文件或 .inter 文件而不是内置数据集:

from surprise import SVD
from surprise import KNNBasic
from surprise import Dataset
from surprise.model_selection import cross_validate

# Load the movielens-100k dataset (download it if needed).
data = Dataset.load_builtin('ml-100k')

# Use the famous SVD algorithm.
algo = KNNBasic()

# Run 5-fold cross-validation and print results.
cross_validate(algo,data,measures=['RMSE','MAE'],cv=5,verbose=True)

我只需要输入数据路径和文件名的完整代码行如何?我已经尝试过 Surprise 的网站,但我什么也没找到。所以我不想要示例中的 movielens 代码,而是加载数据路径和文件的一行。

解决方法

首先你需要创建 Reader() 的实例:

reader = Reader(line_format=u'rating user item',sep=',',rating_scale=(1,6),skip_lines=1)

请注意,line_format 参数只能是 'rating user item'(可以选择添加 'timestamp')并且这些参数与您的 custom_rating.csv 中的列名称无关。这就是定义 skip_lines=1 参数的原因(它跳过通常定义列名的 csv 文件 中的第一行)。 另一方面,line_format 参数确定列的顺序。所以为了清楚起见,我的 custom_ratings.csv 看起来像这样:

评分、用户 ID、电影 ID
4,1,1
6,2
1,3
. . .
. . .
. . .

现在您可以创建您的 data 实例:

data = Dataset.load_from_file("custom_rating.csv",reader=reader)

最后,您可以继续创建 SVD 模型,如 examples 所示:

# sample random trainset and testset
# test set is made of 20% of the ratings.
trainset,testset = train_test_split(data,test_size=.2)

# We'll use the famous SVD algorithm.
algo = SVD()

# Train the algorithm on the trainset,and predict ratings for the testset
algo.fit(trainset)
predictions = algo.test(testset)

# Then compute RMSE
accuracy.rmse(predictions)

PS:并且不要忘记在代码的开头导入库:)

from surprise import SVD
from surprise import Dataset
from surprise import accuracy
from surprise import Reader
from surprise.model_selection import train_test_split

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...