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

yizhihongxing

不到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中进行异步编程?

    异步编程是Python中的一种编程模型,使用异步编程可以让程序在处理I/O密集型任务时更加高效。在Python 3.5及以上版本中引入了async/await关键词,它们是实现异步编程的主要工具。下面是在Python中进行异步编程的完整攻略。 1. 使用async/await关键词进行异步编程 async/await关键词是Python 3.5及以上版本中添…

    python 2023年4月19日
    00
  • python爬虫lxml库解析xpath网页过程示例

    Python爬虫lxml库解析XPath网页过程示例 在Python中,我们可以使用第三方库lxml和XPath来解析HTML和XML页面。本文将详细讲解如何使用lxml和XPath实现网页解析,并提供两个示例。 步骤1:安装lxml库 在使用lxml库之前,我们需要安装它。您可以使用以下命令安装lxml库: pip install lxml 步骤2:使用l…

    python 2023年5月15日
    00
  • Python的面向对象编程方式学习笔记

    那么今天我们来讲一下“Python的面向对象编程方式学习笔记”的完整攻略。 目录结构 首先,我们要清楚文档的目录结构是什么样的。目录结构应该具有层次感,能够清晰地体现出文档的结构和内容。一个典型的目录结构如下: – Python的面向对象编程方式学习笔记 – 第一章:基本知识 – 1.1 面向对象编程思想 – 1.2 关键字和标识符 – 1.3 注释和各种符…

    python 2023年6月3日
    00
  • Python tkinter模块中类继承的三种方式分析

    我来为你详细讲解“Python tkinter模块中类继承的三种方式分析”的攻略。 1. 介绍 Python tkinter模块是Python内置的图形化界面库,提供了一系列的控件,可以用于创建各种应用程序的GUI图形界面。其中,类继承是Python tkinter模块中面向对象编程的重要概念之一。在类继承的基础上,我们可以更方便地重用代码,扩展类的功能并提…

    python 2023年5月19日
    00
  • python通过urllib2获取带有中文参数url内容的方法

    要通过urllib2库获取带有中文参数的url内容,需要注意以下几点: 中文参数需要转码为url能够识别的utf-8格式。 urllib2库默认使用的User-Agent为Python-urllib/2.7,容易被服务器拦截,建议修改为浏览器的User-Agent。 使用Request对象传递参数和Header。 下面给出两个示例来说明: 示例1:获取有道翻…

    python 2023年5月31日
    00
  • 如何使用Python连接和操作PostgreSQL数据库?

    在Python中,可以使用psycopg2模块连接和操作PostgreSQL数据库。以下是Python使用psycopg2模块连接和操作PostgreSQL数据库的完整攻略,包括连接PostgreSQL数据库、插入数据、查询数据、更新数据和删除数据等操作。 连接PostgreSQL数据库 在Python中,可以使用psycopg2模块连接PostgreSQL…

    python 2023年5月12日
    00
  • 笔记本电脑选集成显卡好还是独立显卡好

    笔记本电脑选集成显卡好还是独立显卡好 笔记本电脑的显卡可以分为集成显卡和独立显卡两种。那么,选购笔记本电脑时,应该选集成显卡好还是独立显卡好呢?下面详细讲解一下,希望可以对你有所帮助。 集成显卡 集成显卡是内嵌于主板上的显卡,一般使用内存的一部分。集成显卡因为是内置的,所以不占用其他空间,从而令笔记本电脑变得轻薄。相对于独立显卡来讲,集成显卡成本更低,价格更…

    python 2023年6月5日
    00
  • Python多层嵌套list的递归处理方法(推荐)

    以下是详细讲解“Python多层嵌套list的递归处理方法(推荐)”的完整攻略。 在Python中,多层嵌套的列表(list)是一种常见的数据结构。在处理多层套的列表时,可以使用递归的方法来遍历和处理列表中的元素。下面是一些常见的递归处理方法。 方法一:使用递归函数 def process_list(lst): for item in lst: if isi…

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