文章目錄
- 1 簡介
- 1 設計概要
- 2 課題背景和目的
- 3 協同過濾演算法原理
- 3.1 基于用戶的協同過濾推薦演算法實作原理
- 3.1.1 步驟1
- 3.1.2 步驟2
- 3.1.3 步驟3
- 3.1.4 步驟4
- 4 系統實作
- 4.1 開發環境
- 4.2 系統功能描述
- 4.3 系統資料流程
- 4.3.1 用戶端資料流程
- 4.3.2 管理員端資料流程
- 4.4 系統功能設計
- 5 主要頁面設計
- 5.1 登錄頁面設計
- 5.2 系統首頁設計
- 5.3 電影詳情頁面設計
- 5.4 代碼實作
- 5.4.1 Django配置
- 5.5 模板配置
- 5.6 用戶登錄功能實作
- 5.7 圖片上傳功能實作
- 5.8 個性化推薦功能實作
- 5 最后-畢設幫助
1 簡介
今天學長向大家介紹一個學長幫助往屆學生做的畢業設計專案
基于協同過濾的電影推薦系統
畢設幫助,開題指導,技術解答
🇶746876041
1 設計概要
21世紀是資訊化時代,隨著資訊技術和網路技術的發展,資訊化已經滲透到人們日常生活的各個方面,人們可以隨時隨地瀏覽到海量資訊,但是這些大量資訊千差萬別,需要費事費力的篩選、甄別自己喜歡或者感興趣的資料,對網路電影服務來說,需要用到優秀的協同過濾推薦功能去輔助整個系統,
學長設計的系統基于Python技術,使用UML建模,采用Django框架組合進行設計,Mysql資料庫存盤資料,本系統的功能主要包括:用戶注冊、登錄、資訊維護、搜索電影、電影評分、個性化推薦以及管理員進行資訊管理等,
個性化推薦功能使用基于用戶的協同過濾演算法和熱點推薦來實作,開發工具主要有:Pycharm、Python3.8、Django3、mysql8、Navicat等,
電影在線推薦系統很大程度上提高了對電影管理的效率,符合廣大用戶的基本需求,

2 課題背景和目的
日益發展的網路技術與資訊技術,各種電影網站也是逐漸應運而生,例如:騰訊視頻、優酷視頻、愛奇藝視頻等,人們可以隨時隨地瀏覽到海量資訊,但是這些大量資訊千差萬別,需要人們費事費力的篩選、甄別自己喜歡或者感興趣的資料,
這個課題主要是解決電影網站的個性化推薦功能,以便準確向用戶推薦感興趣的資訊,個性化推薦的主要思想是,根據用戶的歷史操作行為,分析用戶興趣喜好,然后把用戶比較感興趣的同時沒有操作行為的專案推薦給用戶,個性化推薦也可以根據用戶操作行為的變化而實時分析并推薦用戶喜好程度比較高的專案,這樣用戶會對網站產生粘性,提高用戶的忠誠度,為商家帶來流量,進一步提高商家利潤,具有較大的商業價值,可以達到雙贏的目的,
3 協同過濾演算法原理
3.1 基于用戶的協同過濾推薦演算法實作原理
傳統的基于用戶(User-Based)的協同過濾推薦演算法實作原理分四個步驟:
3.1.1 步驟1
根據用戶歷史行為資訊構建用戶-專案評分矩陣,用戶歷史行為資訊包括專案評分、瀏覽歷史、收藏歷史、喜好標簽等,本文以單一的專案評分為例,后期介紹其他行為資訊和混合行為資訊,用戶-專案評分矩陣如表1所示:

注:用戶A對專案1的評分是1分,用戶A對專案2沒有評分,
3.1.2 步驟2
根據用戶-專案評分矩陣計算用戶之間的相似度,計算相似度常用的方法有余弦演算法、修正余弦演算法、皮爾森演算法等等(后期我們會將相似度演算法展開講解,這里以余弦演算法為例),余弦演算法公式如圖1所示:


3.1.3 步驟3
根據用戶之間的相似度得到目標用戶的最近鄰居KNN,KNN的篩選常用的有兩種方式,一種是設定相似度閥值(給定一個相似度的下限,大于下限的相似度為最近鄰居),一種是根據與目標用戶相似度的高低來選擇前N個最近鄰居(本次以前N個為例,后期會詳細對比講解兩者),相似度排序可用經典冒泡排序法,
3.1.4 步驟4
預測專案評分并進行推薦,最常用的預測公式如圖所示:

注:該公式實際上是相似度和評分的加權平均數,
表示用戶u對專案i的預測評分,n是最近鄰集合,v是任意一個最近鄰居, 表示最近鄰v和目標用戶u的相似度乘以最近鄰v對專案i的評分,得到預測評分后按照評分高低進行降序推薦,
4 系統實作
4.1 開發環境
- Python3.8,
- Django3,
- mysql8,
- navicat資料庫管理工具,
- html頁面,
- javascript腳本,
- jquery腳本,
- bootstrap前端框架,
- layer彈窗組件等,
4.2 系統功能描述
系統代碼目錄

專案功能
- 前臺首頁地址:http://127.0.0.1:8000/
- 后臺首頁地址:http://127.0.0.1:8000/admin
- 管理員賬號:admin 管理員密碼:admin
- 前臺用戶包含:注冊、登錄、注銷、瀏覽電影、搜索電影、資訊修改、電影評分、個性化推薦電影等功能;
- 后臺管理員包含:用戶管理、電影管理、電影型別管理、評分管理、權限管理等,
性化推薦功能
游客采用熱點推薦(根據電影總評分降序推薦),
登錄用戶,首先根據用戶評分記錄,使用基于用戶的協同過濾推薦演算法推薦電影,如果沒有推薦結果采用熱點推薦(根據電影總評分降序推薦)
演算法的實作使用python常規函式,嚴格按照演算法步驟實作,
舉例:
用戶A:對電影1,2,3進行評分
用戶B:對電影1,2進行評分
用戶C:對電影1進行評分
那么:
用戶B,C 不會對用戶A進行推薦
用戶A,C 不會對用戶B進行推薦
用戶A,B 會對用戶C進行推薦電影2
4.3 系統資料流程
電影在線推薦系統主要由用戶端、管理員端組成,用戶端主要負責用戶注冊、登錄、資訊維護、搜索電影、查看電影、電影評分、個性化推薦等,管理員端負責管理員登錄、資訊維護、用戶管理、電影型別管理、電影管理、評分管理等,
4.3.1 用戶端資料流程
用戶端的基本流程共有四個步驟:
- 1、用戶在系統首頁可瀏覽電影、搜索電影、個性化推薦,
- 2、用戶輸入用戶名、年齡、性別、郵箱、登錄密碼進行注冊,
- 3、用戶注冊成功后輸入正確的登錄憑證進入系統,若登錄憑證不正確,系統會自動回傳到登錄頁面,提示用戶重新輸入登錄資訊,直到用戶成功登錄進入系統,
- 4、用戶成功進入系統后,可以進行電影打分、修改資訊、個性化推薦等,
具體如下圖所示:

4.3.2 管理員端資料流程
管理員端的基本流程共有三個步驟:
1、管理員輸入正確的登錄憑證進入系統,若登錄憑證不正確,系統會自動回傳到登錄頁面,提示管理員重新輸入登錄資訊,直到管理員成功登錄進入系統,
2、管理員成功進入系統后,首頁顯示用戶數量、電影型別數量、電影數量、評分數量等資料統計資訊,
3、管理員具有用戶管理、電影型別管理、電影管理、評分管理等功能,
根據上述流程可得到管理員端的資料流程圖,具體如下圖所示

4.4 系統功能設計
電影在線推薦系統主要由用戶端、管理員端模塊組成,各個模塊下邊又有許多小模塊組成,每個模塊的作用各不相同,但彼此之間又存在一定關系,通過分析上述模塊之間的聯系以及系統需求,可得到該系統的功能架構,具體如圖

5 主要頁面設計
5.1 登錄頁面設計
用戶登錄頁面使用DIV標簽布局,Form標簽提交登錄名、登錄密碼,登錄時Jquery腳本會驗證登錄名或登錄密碼是否為空,如果為空,會給出提示取消登錄操作,登陸成功也會給出登錄成功提示

5.2 系統首頁設計
統首頁使用DIV標簽布局,分為頭頁面、中間頁面、底頁面,其中頭頁面是公共頁面,包含網站名稱、搜索框、注冊按鈕、登錄按鈕、用戶名、注銷按鈕、電影型別等,中間頁面是內容頁面,不同的頁面展示不同的內容,底頁面也是公共頁面,使用Django的include指令引入頭和底頁面


5.3 電影詳情頁面設計
電影詳情頁面使用DIV標簽布局,通過Django的include指令引入頭頁面和底頁面,內容頁展示電影封面、電影名稱、電影型別、電影簡介和五角星評分按鈕,如果當前登錄用戶沒有對該電影進行評分,那么評分五角星顏色是灰色,如果有用戶評分,那么根據評分多少顯示具體個數的黃色五角星,五角星評分功能使用Jquery的raty腳本組件

5.4 代碼實作
5.4.1 Django配置
Django是一個開放源代碼的Web應用框架,由Python寫成,采用了MTV的框架模式,即模型M,視圖V和模版T,通過Pycharm工具可以輕松創建Django框架專案,初始專案中主要包含settings.py主組態檔、urls.py路由組態檔、manage.py專案啟動組態檔等,settings.py主組態檔可配置專案自定義應用程式、資料庫鏈接、視圖路徑、靜態資源路徑、日志等;urls.py路由組態檔主要是配置請求路由、專案名稱等,
# 在setting.py中定義全域變數,該變數的變數名需要全部大寫,否則會參考不到
import os
# import rpvpext.webutil
from pathlib import Path
# 專案根目錄:例如:F:\pycharmworkspace\WebMovieCFRSPython
BASE_DIR = Path(__file__).resolve().parent.parent
# setting中的加密鹽,該配置是django的安全配置,防止攻擊用的,該值是startProject時用系統的某個演算法產生
SECRET_KEY = 'django-insecure-9nvr8lf^amyc)9y)wgcm&2th*%j=2l-s4@_(%#z^%l1z4neyd$'
# 除錯模式是否開啟
DEBUG = True
# 訪問web服務的的Ip配置,用于配置能夠訪問當前站點的域名(IP地址),
# 當 DEBUG = False 時,必須填寫,有以下三種使用方法:
# [],空串列,表示只有127.0.0.1,localhost能訪問本專案;
# ['*'],表示任何網路地址都能訪問到當前專案;
# ['192.168.1.3', '192.168.3.3'] 表示只有當前兩個主機能訪問當前專案,
ALLOWED_HOSTS = ['*']
# app應用的安裝配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.index.apps.AppsConfig', # 自定義app,前臺首頁
'apps.user.apps.AppsConfig', # 自定義app,用戶
'apps.type.apps.AppsConfig', # 自定義app,電影型別
'apps.item.apps.AppsConfig', # 自定義app,電影
'apps.scorerecord.apps.AppsConfig', # 自定義app,評分記錄
'apps.common.apps.AppsConfig' # 自定義app,公共
]
# django的中間件配置,即MIDDLEWARE設定,
# 所謂中間件就是從用戶請求到用戶請求結束期間所做的操作,
# 即用戶的請求會次從上到下依次執行MIDDLEWARE中的配置,
# 然后服務器回應用戶的時候會再次從下至上依次執行,
# 在request請求前后,和response回應前后執行
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', # 安全中間件
'django.contrib.sessions.middleware.SessionMiddleware', # 會話中間件, 啟用會話框架
'django.middleware.common.CommonMiddleware', # 通用中間件
# CSRF防御中間件,增加防御保護以防止跨站偽造請攻擊,通過向表單Post請求中添加隱藏表單欄位以及對請求進行檢查以獲取正確的值,
'django.middleware.csrf.CsrfViewMiddleware',
# admin用戶認證中間件,在每個HttpRequest請求物件中添加user屬性,表名當前已登錄的用戶
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 訊息中間件,提供Django的cookie以及session框架的支持,這兩個基于訊息中間件實作,
'django.contrib.messages.middleware.MessageMiddleware',
# X框架操作中間件,通過頭部資訊中增加X-Frame-OptionsLAI 防止簡單的點擊劫持,
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 前臺登錄權限驗證中間件,自定義
'apps.common.loginMiddleware.LoginMiddleware',
]
# 指定根級url的配置
ROOT_URLCONF = 'MovieRecommendSystemPython.urls'
# 它用于指定模板的配置資訊,串列中每一元素都是一個字典,如下所示是 Django 默認自帶模板引擎
# 全域背景關系處理器提供的變數優先級高于單個視圖函式給單個模板傳遞的變數,
# 這意味著全域背景關系處理器提供的變數可能會覆寫你視圖函式中自定義的本地變數,
# 因此請注意避免本地變數名與全域背景關系處理器提供的變數名稱重復,
# 這些變數名包括perms, user和debug等等,
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', # 默認使用的模板引擎
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 模板路徑
'APP_DIRS': True, # 引擎是否在已安裝應用程式(的目錄)內查找模板源檔案,
'OPTIONS': { # 傳遞給模板引擎的其他引數
'context_processors': [ # 背景關系處理器,也可以自定義,這樣就可以在模板中直接使用debug、request、auth、message變數
# 在模板里面可以直接使用settings的DEBUG引數以及強大的sql_queries:它本身是一個字典,
# 其中包括當前頁面執行SQL查詢所需的時間
'django.template.context_processors.debug',
# 在模板中可以直接使用request物件
'django.template.context_processors.request',
# 在模板里面可以直接使用user,perms物件,
'django.contrib.auth.context_processors.auth',
# 在模板里面可以直接使用message物件,
'django.contrib.messages.context_processors.messages',
# 也可以繼續添加
# "django.template.context_processors.i18n", # 在模板里面可以直接使用settings的LANGUAGES和LANGUAGE_CODE
# 'django.template.context_processors.media', # 可以在模板里面使用settings的MEDIA_URL引數
# 'django.template.loaders.filesystem.Loader',
# 'django.template.loaders.app_directories.Loader',
],
},
},
]
# 專案部署時,Django的內置服務器將使用的WSGI應用程式物件的完整Python路徑,
WSGI_APPLICATION = 'MovieRecommendSystemPython.wsgi.application'
# 資料庫鏈接配置,也可以以組態檔的形式加載資料庫資訊,django目前支持sqlite、mysql、postgreSQL、oracle資料庫
# sqlite資料庫:'django.db.backends.sqlite3',
# postgreSQL資料庫:'django.db.backends.postgresql_psycopg2',
# mysql資料庫:'django.db.backends.mysql'
# oracle資料庫:'django.db.backends.oracle'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'movierecommendsystempython',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
# 這是一個支持插拔的密碼驗證器,且可以一次性配置多個,
# Django 通過這些內置組件來避免用戶設定的密碼等級不足的問題,
AUTH_PASSWORD_VALIDATORS = [
{ # 檢查密碼和用戶某些屬性的相似性
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{ # 檢查密碼的最小長度(默認8)
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{ # 檢查密碼是否出現在常用密碼表中
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{ # 檢查密碼是否全為數字
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# 設定語言zh-hans,zh-cn,en-us
LANGUAGE_CODE = 'zh-hans'
# 設定時區Asia/Shanghai,UTC
TIME_ZONE = 'Asia/Shanghai'
# 設定國際化,根據個人需要進行設定:
USE_I18N = True
# 相同內容被不同時區地區的用戶訪問時,是否以不同格式內容展示(例如時間,日期,數字)
USE_L10N = True
# 設定保存到資料庫時間型別是否為UTC時間,如果不需要請設定為false,默認為true
USE_TZ = True
# 它指的是靜態資源的存放位置,靜態資源包括 CSS、JS、Images,比如我們要在專案中添加一些靜態圖片
# 通常這些靜態圖片被存放在新建的 static 目錄下,這樣就實作了通過 STATIC_URL= '/static/' 路徑對靜態資源的訪問,
STATIC_URL = '/static/'
# 靜態檔案的路徑
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
# 設定圖片上傳路徑
MEDIA_ROOT = os.path.join(BASE_DIR, "media/")
# 圖片的統一路由
MEDIA_URL = "/media/"
# 日志
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
5.5 模板配置
模板是html檔案,默認路徑是專案根路徑的templates檔案夾中,Django模板中主要有兩種特殊符號:{{ }}和 {% %},{{ }}表示變數可直接獲取request、session、application中的變數,在模板渲染的時候替換成值,{% %}表示邏輯相關的操作,可直接撰寫python代碼,圖5.5是前臺index.html部分配置,

5.6 用戶登錄功能實作
用戶在登錄頁面登錄失敗會提示登錄失敗原因,用戶登錄成功會提示正在跳轉頁面,用戶登錄實作代碼具體如圖

5.7 圖片上傳功能實作
本系統圖片上傳功能使用Django后臺框架的Model組件實作,在model檔案中直接宣告物體類的屬性型別是圖片型別,圖片上傳功能代碼具體如圖

5.8 個性化推薦功能實作
基于用戶的協同過濾推薦演算法實作可分為三個步驟:首先將用戶電影評分資料構建成用戶-電影評分矩陣,然后通過皮爾森相似度演算法計算用戶之間的相似度,再從中選出與目標用戶相似度最高的TopN個最近鄰用戶,然后計算TopN個近鄰用戶的相似度與電影的加權平均數,最后得到K個推薦的電影,


5 最后-畢設幫助
畢設幫助,開題指導,技術解答
🇶746876041
關注公眾號獲取更多畢設資料
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387768.html
標籤:AI
上一篇:感知器演算法混亂
