python|surprise学习文档(一)

本文是用来记录学习surprise的过程。
本文内容:

  1. 自动交叉验证
  2. train-test split 和 fit() 方法
  3. 训练整个数据集和predict()方法

排个雷:evaluate()方法在1.0.5版本中已经弃用(功能上已由取代model_selection().cross_validate),并在1.1.0中删除(你要看一下你现在安装的版本)。

1.自动交叉验证

Surprise有一套内置的算法和数据集供您使用。在最简单的形式中,只需几行代码即可运行交叉验证程序:

import surprise
from surprise import SVD
from surprise import Dataset
# evaluate()方法在1.0.5版本中已经弃用(功能上已由取代model_selection().cross_validate),并在1.1.0中删除(你要看一下你现在安装的版本)。

from surprise.model_selection import cross_validate

# 首次运行需要下载
data = Dataset.load_builtin(name='ml-100k') # Movielens 数据集

# 假设使用SVD矩阵分解
algo = SVD()

#运行5倍交叉验证并打印结果
cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)

代码运行结果:由于随机化,结果可能有差别。


                  Fold 1  Fold 2  Fold 3  Fold 4  Fold 5  Mean    Std
RMSE (testset)    0.9332  0.9367  0.9360  0.9396  0.9363  0.9364  0.0020
MAE (testset)     0.7360  0.7372  0.7376  0.7394  0.7385  0.7378  0.0012
Fit time          6.48    6.84    8.08    6.43    6.50    6.87    0.63
Test time         0.23    0.26    0.25    0.23    0.21    0.24    0.02

这个load_builtin()方法将提供下载电影-100 k数据集(如果你尚未下载),则将其保存在.surprise_data文件夹在您的主目录中(您也可以选择保存它)。其他地方).

我们在这里用的是SVD算法,但许多其他算法是可用的。

这个cross_validate()函数根据cv参数,并计算accuracy措施。我们在这里使用的是经典的5倍交叉验证,但是可以使用更好的迭代器。

2.train-test split 和 fit() 方法

如果不希望运行完整的交叉验证过程,则可以使用train_test_split()若要示例具有给定大小的培训集和测试集,请使用accuracy metric你的选择。您需要使用fit()方法,该方法将在训练集上训练算法,以及test()方法,该方法将返回从测试集所作的预测:

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

# 首次运行需要下载
data = Dataset.load_builtin('ml-100k') # Movielens 数据集

# 随机测试集和训练集
# 将25%的数据设置为测试集
trainset, testset = train_test_split(data, test_size=.25)

# 使用SVD矩阵分解
algo = SVD()

# 在训练集中训练算法,并在测试集中预测
algo.fit(trainset)
predictions = algo.test(testset)

'''
# 可以使用下面这行代码来训练和测试算法
predictions = algo.fit(trainset).test(testset)
'''

# 计算 RMSE
accuracy.rmse(predictions)

计算得到的结果是:

RMSE: 0.9425

可能每次运行得到的结果不太一样,前面已经讲过了。

3.训练整个数据集和predict()方法

我们可以简单的将算法与整个数据集相匹配,而不是运行交叉验证。可以用build_full_trainset()构建trainset对象方法实现:

from surprise import KNNBasic
from surprise import Dataset

# 首次运行需要下载
data = Dataset.load_builtin('ml-100k') # Movielens 数据集

# Retrieve the trainset.
# 训练集
trainset = data.build_full_trainset()

# 构建算法并训练
algo = KNNBasic()
algo.fit(trainset)

# 确保这两个在训练集中,并且真实值为4
uid = str(196)  # 用户
iid = str(302)  # 物品

# 获取特定用户和物品的预测
pred = algo.predict(uid, iid, r_ui=4, verbose=True)

运行结果:

user: 196        item: 302        r_ui = 4.00   est = 4.06   {'actual_k': 40, 'was_impossible': False}

其中est是预测值

本文讲解的都是内置的数据集,也可以使用自己的数据集,将在下文讲解。

### 解决 Python 中已安装 Surprise 但仍无法导入的问题 当遇到 `Surprise` 库已经成功安装却仍然无法导入的情况时,可能涉及多种原因。以下是可能导致此问题的原因以及解决方案: #### 可能原因及对应解决方法 1. **虚拟环境未激活** 如果使用了多个 Python 虚拟环境,则可能是当前运行的脚本所在的环境中并未正确安装 `surprise`。可以通过以下命令确认是否已在当前环境下安装该库: ```bash pip show surprise ``` 若无任何输出,则说明尚未安装。可以重新执行安装命令来解决问题: ```bash pip install scikit-surprise ``` 2. **大小写敏感问题** 在某些操作系统(如 Linux 或 macOS),文件名区分大小写。如果在代码中尝试通过错误的方式导入模块(例如拼写为 `import SURPRISE` 或其他变体形式),则会引发 ImportError 错误。应始终按照官方文档中的方式导入模块: ```python from surprise import Dataset, Reader ``` 3. **缓存文件缺失或损坏** 根据提供的引用[^1],Python 不会在顶层脚本上创建 `.pyc` 文件。这意味着如果你正在运行的是顶级脚本而非被导入的模块,那么不会生成编译后的字节码文件。尽管这通常不影响正常功能,但如果存在依赖于这些字节码的行为或者由于某种原因导致字节码损坏,可能会间接影响加载过程。 4. **版本兼容性冲突** 确认所使用的 Python 版本与 `scikit-surprise` 的最低支持版本致。目前最新版的 `scikit-surprise` 支持 Python >= 3.7。可通过如下命令验证当前 Python 版本: ```bash python --version ``` 同时也需注意是否有其他第三方包与其发生版本不匹配情况,比如 NumPy 和 SciPy 是否满足其需求范围。 5. **路径配置异常** 当前工作目录不在 PYTHONPATH 下也可能造成找不到模块的现象。可打印 sys.path 来查看搜索路径列表并确保目标位置已被包含进去。 ```python import sys print(sys.path) ``` 6. **多版本共存干扰** 存在个常见问题是系统中有不同版本的 Python 安装程序同时存在,而每次调用的实际解释器并不相同。建议指定完整路径来进行操作以避免混淆现象的发生。 --- ### 示例修复代码片段 下面提供段简单的测试代码用于验证安装状态及其基本功能实现状况: ```python from surprise import KNNBasic from surprise import Dataset from surprise.model_selection import cross_validate # 加载内置数据集 MovieLens 小型集合 data = Dataset.load_builtin('ml-100k') # 使用交叉验证评估算法性能 algo = KNNBasic() cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5, verbose=True) ``` 上述例子展示了如何利用 Surprise 提供的功能完成次基础推荐系统的构建流程演示。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值