不到40行代码用Python实现一个简单的推荐系统

不到40行代码用Python实现一个简单的推荐系统

推荐系统是一种常见的人工智能应用,它可以根据用户的历史行为和偏好向用户推荐可能感兴趣的品。本文将介绍如何使用Python实现一个简单的推荐系统,该系统基于用户-物品评分矩阵,使用协同过滤算法进行推荐。

1. 数据集

我们将使用MovieLens数据集来演示如何使用协同过滤算法进行推荐。数据集包含多个用户对多个电影的评分评分范围为1到5。以下是数据集的示例:

用户ID 电影ID 评分
1 1 5
1 2 3
1 3 4
2 1 3
2 2 4
2 3 5
3 1 4
2 2
3 3 1

2. 协同过滤算法

协同过滤算法是一种基于用户或物品的推荐算法,它通过分析用户-物品评分矩阵,找到相似的用户物,并向用户推荐相似物品。具体实现步骤如下:

  1. 构建用户-物品评分矩阵。
  2. 计算间或物品之间的相似度。
  3. 根据相似度,找到与目标用户或物品最相似的K个用户或物4. 根据K个用户或物品的评分,预测目标用户对目标物品的评分。

以下是协同过滤算法的Python实现:

import numpy as np

class CollaborativeFiltering:
    def __init__(self, k=3):
        self.k = k

    def fit(self, X):
        self.X = X
        self.similarity = np.zeros((len(X), len(X)))
        for i in range(len(X)):
            for j in range(i+1, len(X)):
                mask = np.logical_and(X[i] > 0, X[j] > 0)
                if np.sum(mask) > 0:
                    self.similarity[i, j] = np.sum((X[i][mask] - X[j][mask])**2)
                    self.similarity[j, i] = self.similarity[i, j]
        self.neighbors = np.argsort(-self.similarity, axis=1)[:, :self.k]

    def predict(self, user_id, item_id):
        mask = self.X[:, item_id] > 0
        if np.sum(mask) == 0:
            return 0
        similarities = self.similarity[user_id, mask]
        indices = np.argsort(-similarities)[:self.k]
        weights = similarities[indices]
        ratings = self.X[indices, item_id]
        return np.sum(weights * ratings) / np.sum(weights)

这个代码实现了一个名为CollaborativeFiltering类,它包含两个方法:

  • fit(X):用于训练协同过滤推荐器,其中X是一个二维数组,表示用户-物品评分矩阵。
  • predict(user_id, item_id):用于预测目标用户对目标物品评分,其中user_id是目标用户的ID,item_id是目标物品的ID。

3. 示例

示例1

在示例1中,我们使用了MovieLens数据集,使用CollaborativeFiltering类对数据集进行推荐,并输出推荐结果。

import pandas as pd

ratings = pd.read_csv('ratings.csv')
X = ratings.pivot(index='userId', columns='movieId', values='rating').fillna(0).values

cf = CollaborativeFiltering(k=3)
cf.fit(X)

user_id = 1
item_id = 1
rating = cf.predict(user_id-1, item_id-1)
print(f'User {user_id} is likely to rate item {item_id} with a rating of {rating:.2f}')

这个示例将使用上述代码对MovieLens数据集进行推荐,并输出推荐结果。

示例2

在示例2中,我们使用了一个包含5个用户和5个物品的评分矩阵,使用CollaborativeFiltering对评分矩阵进行推荐,并推荐结果。

X = np.array([
    [5, 3, 0, 1, 4],
    [1, 0, 5, 4, 2],
    [4, 2, 1, 3, 0],
    [0, 0, 4, 5, 1],
    [2, 4, 0, 0, 5],
])

cf = CollaborativeFiltering(k=2)
cf.fit(X)

user_id = 0
item_id = 2
rating = cf.predict(user_id, item_id)
print(f'User {user_id} is likely to rate item {item_id} with a rating of {rating:.2f}')

这个示例将使用上述代码对评分矩阵进行推荐,并推荐结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:不到40行代码用Python实现一个简单的推荐系统 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python中模块的使用–binascii模块用法

    好的。首先,binascii模块主要用于二进制和ASCII编码之间的相互转换以及各种二进制数据的编码和解码,提供了许多有用的工具函数。接下来我会详细介绍binascii模块的用法,并提供两个示例说明。 一、binascii模块的常用函数 1.1 binascii.hexlify() 用于将二进制数据转换成十六进制字符串。 示例: import binasci…

    python 2023年6月3日
    00
  • Python 实现自动导入缺失的库

    Python实现自动导入缺失的库攻略 在Python编程过程中,我们经常会用到许多库,但有时我们会遇到缺失某些库的情况。这时我们需要手动导入缺失的库,导入的过程很繁琐。如果能够实现自动导入缺失的库,将会大大提高我们的工作效率。接下来,我们来详细讲解“Python实现自动导入缺失的库”的完整攻略。 确认缺失的库 在程序中运行代码时,如果遇到缺失某个库的情况,P…

    python 2023年5月19日
    00
  • python列表操作实例

    Python列表操作实例 在Python中,列表是一种有序的可变序列,可以包含任意类型的元素。本攻略将详细介绍Python列表的操作,包括如何创建列表、如何访问列表中的元素、如何修改列表中的元素、如何使用列表的方法和如何使用列表的切片。 创建列表 在Python中,可以使用方括号[]来创建一个空列表,也可以在方括号中添加元素来创建一个非空列表。以下是一个示例…

    python 2023年5月13日
    00
  • pip 错误unused-command-line-argument-hard-error-in-future解决办法

    pip是Python语言的包管理器,用于管理Python模块的安装和升级。在使用pip时,有可能会遇到“unused-command-line-argument-hard-error-in-future”的错误提示。本文将详细讲解这个错误的原因和解决办法,帮助读者快速解决此问题。 错误原因: Python 3.7版本的pip在使用时会发生这个错误。这是由于P…

    python 2023年5月13日
    00
  • 最炫Python烟花代码全解析

    “最炫Python烟花代码全解析”介绍了如何使用Python语言实现烟花动画效果。本文将详细讲解该攻略的具体实现过程。 步骤一:导入必要的库 在实现烟花效果之前,需要导入一些常用的Python库,如random、math、turtle等。它们分别提供了生成随机数、数学计算以及绘图等功能。 import random import math import tu…

    python 2023年5月19日
    00
  • python读写文件操作示例程序

    下面是“python读写文件操作示例程序”的完整攻略: 1. 读取文件内容 首先,我们需要确定要读取的文件路径。接下来,可以使用Python内置的open()函数来打开该文件,并使用read()函数读取其中的内容。下面是对应的示例代码: # 打开文件 file = open(‘filename.txt’, ‘r’) # 读取文件内容 content = fi…

    python 2023年5月30日
    00
  • python循环定时中断执行某一段程序的实例

    针对“python循环定时中断执行某一段程序”的需求,可以采用Python中的time模块和signal模块来实现。 一、使用time模块实现定时循环中断 1.1 示例说明 下面我们先通过示例来说明如何使用time模块实现定时循环中断。以下示例的需求是:每隔1秒执行一次某一段程序,并在等待3秒后中断程序。 import time def func(): pr…

    python 2023年6月3日
    00
  • Python 识别录音并转为文字的实现

    Python 识别录音并转为文字的实现攻略 简介 在音频领域中,我们可能需要将录音转换为文本,从而方便文本的处理和分析。本攻略将介绍如何使用 Python 将录音文件转换为文本,提供两个示例: 使用 Google Cloud Speech-to-Text API 实现语音转文本; 使用 SpeechRecognition 库实现语音转文本。 Google C…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部