[推荐系统]基于个性化推荐系统研究与实现(1)

article/2025/7/1 9:20:55

目  录

一、搜索引擎与推荐系统

二、推荐系统原理与算法

2.1 Jaccard系数

2.2 余弦相似度

三、数据定向爬取及电影数据集

3.1 爬取近七日天气预报数据存入DB数据库,分为五步完成。

3.2 爬取豆瓣电影数据集存入CSV文件,分四步。

3.3 电影(MovieLens)数据集数据分析


一、搜索引擎与推荐系统

       从信息获取的角度来看,搜索和推荐是用户获取信息的两种主要手段。无论在互联网上,还是在线下的场景里,搜索和推荐这两种方式都大量并存。搜索是主动行为,并且用户的需求十分明确,在搜索引擎提供的结果里,用户也能通过浏览和点击来明确的判断是否满足了用户需求。然而,推荐系统接受信息是被动的,需求也都是模糊而不明确的。如图1所示,搜索引擎和推荐系统是获取信息的两种不同方式

 图1 搜索引擎和推荐系统是获取信息的两种不同方式

       搜索和推荐虽然有很多差异,但两者都是大数据技术的应用分支,存在着大量的交叠。推荐系统也大量运用了搜索引擎的技术,搜索引擎解决运算性能的一个重要的数据结构是倒排索引技术,而在推荐系统中,一类重要算法是基于内容的推荐,这其中大量运用了倒排索引、查询、结果归并等方法。它们都是数据挖掘技术、信息检索技术、计算统计学等悠久学科的智慧结晶。图2就是一个百度搜索引擎和推荐系统结合的实例,圆圈部分就是推荐系统的内容。

图2  百度搜索引擎和推荐系统结合的实例,圆圈部分是推荐系统内容 

二、推荐系统原理与算法

       推荐系统有三个重要模型:用户模型、推荐对象模块、推荐算法模型。推荐系统把用户模型中,兴趣需求信息和推荐对象模型中的特征信息匹配,同时使用相应的推荐算法进行计算筛选,找到用户可能感兴趣的推荐对象,然后推荐给用户。常用的推荐算法有:Jaccard系数,余弦相似度,皮尔逊系数等。

2.1 Jaccard系数

      Jaccard系数等于样本集交集个数和样本集并集个数的比值,用J(A,B)表示。定义集合(A,B)都为空时,J(A,B)=1。

     Jaccard系数主要的应用的场景有:

  1. 过滤相似度很高的新闻,或者网页去重;
  2. 考试防作弊系统;
  3. 论文查重系统。
# -*- coding: utf-8 -*-
"""
Created on Thu Jul  2 22:52:58 2020
@author: zcq
"""
import jieba
def Jaccrad(model, reference):#terms_reference为源句子,terms_model为候选句子terms_reference= jieba.cut(reference)#默认精准模式terms_model= jieba.cut(model)grams_reference = set(terms_reference)#去重;如果不需要就改为listgrams_model = set(terms_model)temp=0for i in grams_reference:if i in grams_model:temp=temp+1fenmu=len(grams_model)+len(grams_reference)-temp #并集jaccard_coefficient=float(temp/fenmu)#交集return jaccard_coefficient
a="香农在信息论中提出的信息熵定义为自信息的期望"
b="信息熵作为自信息的期望"
jaccard_coefficient=Jaccrad(a,b)
print(jaccard_coefficient)

图2是Python实现a,b两个集合的Jaccard系数,相似度为0.3846。

Python运行结果:

        0.38461538461538464

2.2 余弦相似度

       使用余弦相似度计算用户与每部电影的距离。用户与每部电影的余弦相似度越高,则说明用户对电影的偏好程度越高。

      Ua:用户对电影类型a的偏好程度;

       Ia:电影是否属于类型a,即“构建电影的特征信息矩阵”中对应类型a的特征信息矩阵。

三、数据定向爬取及电影数据集

3.1 爬取近七日天气预报数据存入DB数据库,分为五步完成。

步骤1:获取西安天气预报网址http://www.weather.com.cn/weather/101110101.shtml;

步骤2:引入sqlite3、BeautifulSoup、urllib.request组件,实现WeatherDB、WeatherForecast类;

步骤3:实现WeatherDB类的数据库创建openDB、插入insert、查询show、关闭closeDB方法;

步骤4:实现WeatherForecast类的初始化init、城市预测forecastCity、批量预测process;

步骤5:Python编程实现(程序代码见下图)

# -*- coding: utf-8 -*-
"""
Created on Sat Jun 27 09:18:48 2020
@author: zcq
"""from bs4 import BeautifulSoup
from bs4 import UnicodeDammit
import urllib.request
import sqlite3class WeatherDB:def openDB(self):self.con=sqlite3.connect("weathers.db")self.cursor=self.con.cursor()try:self.cursor.execute("create table weathers (wCity varchar(16),wDate varchar(16),wWeather varchar(64),wTemp varchar(32),constraint pk_weather primary key(wCity,wDate))")except:self.cursor.execute("delete from weathers")def closeDB(self):self.con.commit()self.con.close()def insert(self,city,date,weather,temp):try:self.cursor.execute("insert into weathers (wCity,wDate,wWeather,wTemp) values (?,?,?,?)" ,(city,date,weather,temp))except Exception as err:print(err)def show(self):self.cursor.execute("select * from weathers")rows=self.cursor.fetchall()print("%-16s%-16s%-32s%-16s" % ("city","date","weather","temp"))for row in rows:print("%-16s%-16s%-32s%-16s" % (row[0],row[1],row[2],row[3]))class WeatherForecast:def __init__(self):self.headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"} self.cityCode={"北京":"101010100","上海":"101020100","广州":"101280101","深圳":"101280601","西安":"101110101"}def forecastCity(self,city):if city not in self.cityCode.keys():print(city+" code cannot be found")returnurl="http://www.weather.com.cn/weather/"+self.cityCode[city]+".shtml"try:req=urllib.request.Request(url,headers=self.headers)data=urllib.request.urlopen(req)data=data.read()dammit=UnicodeDammit(data,["utf-8","gbk"])data=dammit.unicode_markupsoup=BeautifulSoup(data,"lxml")lis=soup.select("ul[class='t clearfix'] li")for li in lis:try:date=li.select('h1')[0].textweather=li.select('p[class="wea"]')[0].texttemp=li.select('p[class="tem"] span')[0].text+"/"+li.select('p[class="tem"] i')[0].textprint(city,date,weather,temp)self.db.insert(city,date,weather,temp)except Exception as err:print(err)except Exception as err:print(err)def process(self,cities):self.db=WeatherDB()self.db.openDB()for city in cities:self.forecastCity(city)#self.db.show()self.db.closeDB()ws=WeatherForecast()
ws.process(["北京","上海","广州","深圳","西安"])
print("completed")

运行结果:

北京 3日(明天) 雷阵雨转多云 25℃/20℃
北京 4日(后天) 雷阵雨 28℃/20℃
北京 5日(周日) 雷阵雨 29℃/21℃
北京 6日(周一) 多云 31℃/23℃
北京 7日(周二) 雷阵雨 32℃/22℃
北京 8日(周三) 多云 30℃/22℃
上海 3日(明天) 中雨转阴 26℃/23℃
上海 4日(后天) 小雨转大雨 28℃/24℃
上海 5日(周日) 中雨 29℃/24℃
上海 6日(周一) 小雨 29℃/25℃
上海 7日(周二) 小雨 30℃/26℃
上海 8日(周三) 阴转小雨 29℃/26℃
广州 3日(明天) 雷阵雨 33℃/27℃
广州 4日(后天) 雷阵雨 33℃/28℃
广州 5日(周日) 晴 34℃/28℃
广州 6日(周一) 晴 35℃/28℃
广州 7日(周二) 晴 35℃/28℃
广州 8日(周三) 晴 35℃/28℃
深圳 3日(明天) 雷阵雨 32℃/27℃
深圳 4日(后天) 雷阵雨 32℃/27℃
深圳 5日(周日) 雷阵雨转阵雨 32℃/27℃
深圳 6日(周一) 阵雨 33℃/28℃
深圳 7日(周二) 阵雨 33℃/28℃
深圳 8日(周三) 阵雨 33℃/28℃
西安 3日(明天) 多云转阴 35℃/23℃
西安 4日(后天) 多云 33℃/22℃
西安 5日(周日) 晴 36℃/23℃
西安 6日(周一) 晴转多云 37℃/22℃
西安 7日(周二) 晴 37℃/22℃
西安 8日(周三) 多云转阴 33℃/21℃
Completed

3.2 爬取豆瓣电影数据集存入CSV文件,分四步。

步骤1:获取豆瓣电影 Top 250:豆瓣电影 Top 250

步骤2:引入requests_html 、csv

步骤3:爬取结果存入文件:豆瓣top251.csv

步骤4:Python编程实现

 图3 豆瓣电影 Top 250

图4 豆瓣top251.csv 

       由于爬虫爬取的数据集特征有限,本文采用公开电影数据集(MovieLens ml-lm),该数据集包含四个文件:README、ratings.dat(用户评分数据集)、movies.dat(电影类型数据集)、users.dat(用户数据集)。

3.3 电影(MovieLens)数据集数据分析

   MovieLens数据集是一个关于电影评分的数据集。下载地址:https://grouplens.org/datesets/movielens.

      本例使用ml-lm电影数据集,该数据集包含四个文件:README、ratings.dat、movies.dat、users.dat。

(1)ratings.dat(用户评分数据集)包含四个字段,分别用户ID,电影ID,评分(1-5分)和时间戳,共100多万记录(如下图,电影得分及评分人数分布情况图);

包含1000209条数据。

names=["userID", "movieID", "rate", "timestamp"], 

userID的范围为: <1,6040>

movieID的范围为: <1,3952>

评分值的范围为: <1,5>

数据总条数为:

userID        1000209

movieID      1000209

rate              1000209

timestamp    1000209

dtype: int64

数据前5条记录为:

   userID  movieID  rate  timestamp

0       1     1193     5  978300760

1       1      661     3  978302109

2       1      914     3  978301968

3       1     3408     4  978300275

4       1     2355     5  978824291

用户评分记录最少条数为:20

(2)movies.dat(电影类型数据集)包含三个字段,分别为电影ID,电影名称,电影类型(共18种类型,3883条记录,如下图中电影分类及数量);

names=["movieID", "title", "genres"]

movieID的范围为: <1,3952>

数据总条数为:

movieID    3883

title      3883

genres     3883

dtype: int64

电影类型总数为:18

电影类型分别为:dict_keys(['Animation', "Children's", 'Comedy', 'Adventure', 'Fantasy', 'Romance', 'Drama', 'Action', 'Crime', 'Thriller', 'Horror', 'Sci-Fi', 'Documentary', 'War', 'Musical', 'Mystery', 'Film-Noir', 'Western'])

{'Animation': 105, "Children's": 251, 'Comedy': 1200, 'Adventure': 283, 'Fantasy': 68, 'Romance': 471, 'Drama': 1603, 'Action': 503, 'Crime': 211, 'Thriller': 492, 'Horror': 343, 'Sci-Fi': 276, 'Documentary': 127, 'War': 143, 'Musical': 114, 'Mystery': 106, 'Film-Noir': 44, 'Western': 68}

(3)users.dat(用户数据集)包含5字段,分别用户ID,性别取向,年龄,职业,邮编(6040条记录,如下图用户年龄分布图)

names=["userID", "gender", "age", "Occupation", "zip-code"],

userID的范围为: <1,6040>

数据总条数为:

userID        6040

gender        6040

age           6040

Occupation    6040

zip-code      6040

dtype: int64

gender

F    1709

M    4331

Name: gender, dtype: int64

age

1      222

18    1103

25    2096

35    1193

45     550

50     496

56     380

Name: age, dtype: int64

用户年龄分布统计

  

[推荐系统]基于个性化推荐系统研究与实现(2)


http://chatgpt.dhexx.cn/article/4K9qc8NW.shtml

相关文章

如何支持研发对CSDN个性化推荐系统重构

目录 大地图工具构建数据治理保持发布重视测试小结引用 一个以内容服务为主的软件&#xff0c;它的推荐系统在数据侧对软件产生着举足轻重的作用。数据的三个方面决定了这个内容软件的档次。 数据的质量好坏数据和用户需求的相关性好坏数据的层次体系好坏 通常&#xff0c;我…

智能个性化推荐系统设计

推荐系统构成 * 召回层 - 对海量的数据进行召回 * 排序层 - 对召回后的数据进行排序&#xff0c;排序结果返回给用户 推荐系统架构 基于物品的推荐系统架构 基于用户的推荐系统架构

个性化推荐系统设计(4.1)——案例分析

在过去的十年中&#xff0c;神经网络已经取得了巨大的飞跃。如今&#xff0c;神经网络已经得以广泛应用&#xff0c;并逐渐取代传统的机器学习方法。 接下来&#xff0c;我要介绍一下YouTube如何使用深度学习方法来做个性化推荐。 由于体量庞大、动态库和各种观察不到的外部因素…

141.如何个性化推荐系统设计-1

141.1 什么是个性化推荐系统&#xff1f; 个性化推荐系统就是根据用户的历史&#xff0c;社交关系&#xff0c;兴趣点&#xff0c;上下文环境等信息去判断用户当前需要或潜在感兴趣的内容的一类应用。大数据时代&#xff0c;我们的生活的方方面面都出现了信息过载的问题&#…

下一代个性化推荐系统

本文结合技术及社会需求发展的大背景&#xff0c;讲述了当前推荐系统的价值及所面临的挑战&#xff0c;并指出了下一代个性化推荐系统的设计思路及需要注意的问题。 作为个性化推荐系统核心的协同过滤&#xff08;Collabora-tive Filtering&#xff09;算法&#xff0c;是Goldb…

基于大数据的个性化推荐系统

随着互联网时代的发展和大数据时代的到来,人们逐渐从信息匮乏的时代走入了信息过载的时代。为了让用户从海量信息中高效地获取自己所需的信息,推荐系统应运而生。 推荐系统的主要任务就是联系用户和信息,它一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在…

CSDN 个性化推荐系统的设计和演进

个性化推荐项目 个性化推荐的设计和演进项目概览项目梳理依赖管理实现代码的重构和改进持续演化 个性化推荐的设计和演进 CSDN 的个性化推荐系统&#xff0c;是从既有的推荐项目中剥离出来的一个子项目&#xff0c;这个项目随后移交到了我们AI组。在近一年的时间内&#xff0c…

【个性化推荐系统】简介

个性化推荐系统-简介 1. 推荐系统简介2. 推荐系统产生背景3. 推荐系统的作用4. 推荐系统和Web项目的区别 1. 推荐系统简介 ​ 个性化推荐 (推荐系统) 经历了多年的发展&#xff0c;已经成为互联网产品的标配&#xff0c;也是AI成功落地的分支之一&#xff0c;在电商(淘宝/京东…

个性化推荐系统研究综述

从最初接触个性化推荐系统已过去六天。今天是第七天&#xff0c;完全可以对前六日的学习做出复盘。推荐系统并没有如同网络上那般盛传的玄秘深晦&#xff0c;而是直白到令人一眼看穿。 本文从六个层面总结个性化推荐系统&#xff1a; 在用户建模上&#xff0c;详细总结了用户…

个性化推荐系统实践应用

个性化推荐已经成为现代人们生活的一部分&#xff0c; “猜你喜欢”、“相关阅读”你一定并不陌生。计算机如何做到对用户投其所好&#xff1f;企业在做个性化推荐时要如何精准把握用户兴趣&#xff1f;如何解决冷启动问题&#xff1f;如何避免推荐结果的单调与重复&#xff1f…

新闻个性化推荐系统

新闻个性化推荐系统 一、绪论及背景1.1、绪论1.2、背景1.3、发展历史 二、需求分析2.1、功能需求2.1.1、用户功能需求2.1.2、运营功能需求2.1.3、算法功能需求 2.2、非功能需求2.2.1、性能需求2.2.2、准确性需求2.2.3、稳定性需求2.2.4、可靠性需求 三、详细设计3.1、系统结构设…

【推荐系统】什么是好的推荐系统?个性化和非个性化推荐

最近在写一些关于推荐系统的介绍&#xff0c;找了不少案例及资料&#xff0c;总觉得不够具体及深入&#xff0c;没有一些可作为基础及科普类&#xff0c;于是萌生自己来写一篇试试。 定义&#xff1a;推荐系统是信息过滤系统的子类&#xff0c;旨在预测用户对产品或服务的“评…

个性推荐①——系统总结个性化推荐系统

个性推荐系列目录&#xff1a; 个性推荐②—基于用户协同过滤算法原及优化方案 个性推荐③—基于物品的协同过滤算法及优化方案 本文是整理于个性推荐经典之作《推荐系统实战》&#xff0c;将会以十个大家最想问的问题&#xff0c;揭开个性化推荐系统的神秘面纱&#xff08;文…

个性化推荐算法(推荐系统)概要

读者读完本文后&#xff0c;你会知道每类范式常用的算法有哪些、实现的思路是什么、以及常用的应用场景。本文也可以作为读者落地推荐算法到真实推荐场景的参考指南。 一、推荐算法与产品介绍 什么是推荐系统&#xff1f; 在介绍推荐算法之前需要先介绍一下什么是信息过载。…

深度解析京东个性化推荐系统

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 人工智能大数据与深度学习 公众号&#xff1a;datayx 作者简介&#xff1a; fisherman&#xff0c;时任推荐部门推荐系统负责人&#xff0c;负责推荐部门的架构设计及相关研发工作。Davidxiaozhi&…

个性化推荐系统实践

个性化推荐已经成为现代人们生活的一部分&#xff0c; “猜你喜欢”、“相关阅读”你一定并不陌生。计算机如何做到对用户投其所好&#xff1f;企业在做个性化推荐时要如何精准把握用户兴趣&#xff1f;如何解决冷启动问题&#xff1f;如何避免推荐结果的单调与重复&#xff1f…

Scratch Paper Minecraft

Paper Minecraft Scratch 也能创造奇迹 几乎还原了Paper Minecraft,我的世界2D版。| o | 注:文章末尾有下载链接。❤

指纹传感器和Blackfin处理器增强了生物识别设备的设计

生物识别与安全 在当今世界&#xff0c;对有效安全实施和有效实施的需求日益明显。必须确定个人身份以允许或禁止访问安全区域&#xff0c;或使他们能够使用计算机&#xff0c;个人数字助理&#xff08;PDA&#xff09;或移动电话。生物特征签名或生物特征用于通过测量某些独特…

js学到什么程度学框架_如何学到什么

js学到什么程度学框架 Set a target, learn just enough to hit it, teach someone, repeat. 设定目标&#xff0c;学习足以达到目标的目标&#xff0c;教某人&#xff0c;然后重复。 JavaScript’s my craft. JavaScript是我的技能。 Despite my young career, no other ski…

java开发简单解释器,实现一个简单的解释器(5)

你如何处理和了解像创建解释器或编译器这样复杂的事情&#xff1f;在开始时&#xff0c;一切看上去都像是一团乱七八糟的纱线&#xff0c;你需要解开缠结才能得到完美的球。 到达那里的方法是将它解开一个线&#xff0c;一次解开一个结。不过有时候&#xff0c;你可能会觉得自己…