我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python协同过滤算法怎么用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python协同过滤算法怎么用

本篇内容介绍了“Python协同过滤算法怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、数据准备

Liu Yi,3,1001
Chen Er,4,1001
Zhang San,3,1001
Li Si,3,1001
Liu Yi,3,1002
Li Si,4,1002
Liu Yi,4,1003
Zhang San,5,1003
Li Si,5,1003
Liu Yi,4,1004
Zhang San,3,1004
Liu Yi,5,1005

二、计算物品和物品之间的共现矩阵

对上面的数据作一下调整,按用户排列

用户 评分 物品(BookId)

Python协同过滤算法怎么用

再计算物品和物品的共现矩阵中的每一个元素

1001和1002,同时被Liu Yi和Li Si两个用户购买,所以其共现值为2

1001和1003,同时被Liu Yi, Zhang San和Li Si三个用户购买,所以其共现值为3

1001和1004,同时被Liu Yi和Zhang San两个用户购买,所以其共现值为2

1001和1005,只同时被Liu Yi购买, 所以其共现值为1

1002和1003,同时被Liu Yi和Li Si两个用户购买,所以其共现值为2

1002和1004,只同时被Liui Yi购买, 所以其共现值为1

1002和1005,只同时被Liui Yi购买, 所以其共现值为1

1003和1004,同时被Liu Yi和Zhang San两个用户购买,所以其共现值为2

1003和1005,只同时被Liui Yi购买, 所以其共现值为1

1004和1005,只同时被Liui Yi购买, 所以其共现值为1

最终,得到的共现矩阵为

Python协同过滤算法怎么用

三、计算物品被多少个不同的用户购买

购买1001的有Liu Yi, Chen Er, Zhang San和Li Si

购买1002的有Liu Yi和Li Si

购买1003的有Liu Yi, Zhang San和Li Si

购买1004的有Liu Yi和Zhang San

购买1005的有Liu Yi

Python协同过滤算法怎么用

四、计算相似度矩阵

两个物品余弦相似度的计算公式为:

                                       Python协同过滤算法怎么用

根据此公式,

1001与1002的相似度为2 / sqrt(4 * 2) = 0.707

1001与1003的相似度为3 / sqrt(4 * 3) = 0.866

1001与1004的相似度为2 / sqrt(4 * 2) = 0.707

1001与1005的相似度为1 / sqrt(4 * 1) = 0.5

1002与1003的相似度为2 / sqrt(2 * 3) = 0.816

1002与1004的相似度为1 / sqrt(2 * 2) = 0.5

1002与1005的相似度为1 / sqrt(2 * 1) = 0.707

1003与1004的相似度为2 / sqrt(3 * 2) = 0.816

1003与1005的相似度为1 / sqrt(3 * 1) = 0.577

1004与1005的相似度为1 / sqrt(2 * 1) = 0.707

所以,相似度矩阵为

Python协同过滤算法怎么用

假设取K=3

(1) 对于Li Si买过的1001来说,相似度排在前3名的物品和评分为:

1003,0.866

1002,0.707

1004,0.707

这三个物品中,只有1004是Li Si不曾买过的,其推荐值为

1004与1001的相似度 * Li Si对1001的评分 = 0.707 * 3 = 2.121

(2) 对于Li Si买过的1002来说,相似度排在前3名的物品和评分为:

1003,0.816

1001,0.707

1005,0.707

这三个物品中,只有1005是Li Si不曾买过的,其推荐值为

1005与1002的相似度 * Li Si对1002的评分 = 0.707 * 4 = 2.828

(3) 对于Li Si买过的1003来说,相似度排在前3名的物品和评分为:

1001,0.866

1002,0.816

1004,0.816

这三个物品中,只有1004是Li Si不曾买过的,其推荐值为

1004与1003的相似度 * Li Si对1003的评分 = 0.816 * 5 = 4.08

综上,可以给Li Si推荐的书为

Python协同过滤算法怎么用

代码:

#!/usr/bin/env python
#-*-coding:utf-8-*-

import math
import pdb

class ItemBasedCF:
    def __init__(self,train_file):
        self.train_file = train_file
        self.readData()
        
    def readData(self):
        #读取文件,并生成用户-物品的评分表和测试集
        self.train = dict()
        #用户-物品的评分表
        for line in open(self.train_file):
            user,score,item = line.strip().split(",")
            self.train.setdefault(user,{})
            self.train[user][item] = int(float(score))

    def ItemSimilarity(self):
        #建立物品-物品的共现矩阵
        cooccur = dict()  #物品-物品的共现矩阵
        buy = dict()  #物品被多少个不同用户购买N
        for user,items in self.train.items():
            for i in items.keys():
                buy.setdefault(i,0)
                buy[i] += 1
                cooccur.setdefault(i,{})
                for j in items.keys():
                    if i == j : continue
                    cooccur[i].setdefault(j,0)
                    cooccur[i][j] += 1
        #计算相似度矩阵
        self.similar = dict()
        for i,related_items in cooccur.items():
            self.similar.setdefault(i,{})
            for j,cij in related_items.items():
                self.similar[i][j] = cij / (math.sqrt(buy[i] * buy[j]))
        return self.similar

    #给用户user推荐,前K个相关用户,前N个物品
    def Recommend(self,user,K=3,N=10):
        rank = dict()
        action_item = self.train[user]     
        #用户user产生过行为的item和评分
        for item,score in action_item.items():
            sortedItems = sorted(self.similar[item].items(),key=lambda x:x[1],reverse=True)[0:K]
            for j,wj in sortedItems:
                if j in action_item.keys():
                    continue
                rank.setdefault(j,0)
                rank[j] += score * wj
        return dict(sorted(rank.items(),key=lambda x:x[1],reverse=True)[0:N])
    
#声明一个ItemBasedCF的对象    
item = ItemBasedCF("item_book.txt")
item.ItemSimilarity()
recommedDict = item.Recommend("Li Si")
for k,v in recommedDict.items():
    print(k,"\t",v)

运行结果:

1004    6.203803248198273
1005    2.82842712474619

“Python协同过滤算法怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python协同过滤算法怎么用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java如何实现基于用户的协同过滤推荐算法

小编给大家分享一下Java如何实现基于用户的协同过滤推荐算法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度
2023-05-30

RiSearch PHP 与协同过滤算法结合实现个性化搜索

引言:随着互联网的飞速发展,人们对搜索引擎的需求也日益增长。传统的搜索引擎往往只能根据用户提供的关键词进行搜索,无法真正地根据用户的兴趣和偏好来个性化推荐结果。为了解决这个问题,我们可以将RiSearch PHP与协同过滤算法结合起来,实现
2023-10-21

Java怎么使用DFA算法实现敏感词过滤

本篇内容主要讲解“Java怎么使用DFA算法实现敏感词过滤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么使用DFA算法实现敏感词过滤”吧!1 前言敏感词过滤就是你在项目中输入某些字(
2023-07-05

Python基于DFA算法怎么实现内容敏感词过滤

这篇文章主要讲解了“Python基于DFA算法怎么实现内容敏感词过滤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基于DFA算法怎么实现内容敏感词过滤”吧!DFA 算法是通过提前
2023-06-30

怎么在Java中使用DFA算法过滤敏感词

怎么在Java中使用DFA算法过滤敏感词?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体实现: 1、匹配大小写过滤 2、匹配全角半角过滤 3、匹配过滤停顿词过滤。 4、敏
2023-05-30

怎么在python中停用词过滤

这篇文章将为大家详细讲解有关怎么在python中停用词过滤,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesuts;2.scrapy
2023-06-14

集算器怎么协助Java处理结构化文本实现条件过滤

这篇文章主要讲解了“集算器怎么协助Java处理结构化文本实现条件过滤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“集算器怎么协助Java处理结构化文本实现条件过滤”吧!直接用Java实现文本
2023-06-17

python怎么实现CSF地面点滤波算法

这篇文章主要讲解了“python怎么实现CSF地面点滤波算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么实现CSF地面点滤波算法”吧!目录一、算法原理二、读取las点云三、
2023-06-20

Matplotlib怎么为图表添加交云端算法控过滤器

要为Matplotlib图表添加交云端算法控过滤器,可以使用widgets模块中的interact函数。这个函数可以创建一个交互式控件,让用户可以通过滑块、文本框等方式来动态调整图表的参数。下面是一个简单的示例代码,演示如何使用inter
Matplotlib怎么为图表添加交云端算法控过滤器
2024-05-21

Python中怎么用django filter实现多条件过滤

在Django中,可以使用`filter()`方法实现多条件过滤。`filter()`方法接收一个或多个条件表达式作为参数,并返回符合这些条件的对象集合。以下是一个示例,演示如何使用`filter()`方法实现多条件过滤:from dj
2023-10-25

scala怎么调用python算法

在Scala中调用Python算法有多种方法,以下是几种常用的方法:1. 使用Scala的sys.process库调用Python脚本:scalaimport sys.process._// 调用Python脚本val result = "
2023-10-23

Python dHash算法怎么使用

这篇文章主要介绍“Python dHash算法怎么使用”,在日常操作中,相信很多人在Python dHash算法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python dHash算法怎么使用”的疑
2023-06-30

怎么使用Python贪心算法

这篇文章主要介绍“怎么使用Python贪心算法”,在日常操作中,相信很多人在怎么使用Python贪心算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python贪心算法”的疑惑有所帮助!接下来,请跟
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录