Bi 협업 필터링 영화 추천 시스템 구축

1. 소개

오늘은 선배가 이전 학생들을 도왔던 졸업 디자인 프로젝트를 소개합니다.

협업 필터링 기반 영화 추천 시스템

1 디자인 개요

21세기는 정보화시대이며 정보기술과 네트워크 기술의 발달로 정보화는 사람들의 일상생활 전반에 침투하고 있습니다. 힘든 선별이 필요합니다. 좋아하거나 관심이 있는 데이터를 식별합니다. 온라인 영화 서비스의 경우 우수한 협업 필터링 추천 기능을 사용하여 전체 시스템을 지원해야 합니다.

선배가 설계한 시스템은 Python 기술을 기반으로 UML을 사용하여 모델링하고 Django 프레임워크 조합을 설계에 채택하고 Mysql 데이터베이스를 데이터 저장에 사용합니다. 이 시스템의 기능에는 주로 사용자 등록, 로그인, 정보 유지, 영화 검색, 영화 등급, 개인화 추천 및 관리자에 의한 정보 관리가 포함됩니다.

개인화 추천 기능은 사용자 기반 협업 필터링 알고리즘과 핫스팟 추천으로 구현됩니다. 개발 도구에는 주로 Pychar, Python3.8, Django3, mysql8, Navicat 등이 포함됩니다.

영화 온라인 추천 시스템은 영화 관리의 효율성을 크게 향상시키고 대다수 사용자의 기본 요구를 충족합니다.

여기에 이미지 설명 삽입

2 대상 배경 및 목적

네트워크 기술과 정보 기술의 발전이 증가함에 따라 Tencent Video, Youku Video, iQiyi Video 등과 같은 다양한 영화 웹 사이트가 점차 등장했습니다. 사람들은 언제 어디서나 방대한 양의 정보를 열람할 수 있지만 이러한 방대한 양의 정보는 그 종류가 매우 다양하여 사람들이 좋아하거나 관심 있는 데이터를 필터링하고 식별하는 데 많은 노력을 기울여야 합니다.

본 주제는 주로 영화 웹사이트의 개인화 추천 기능을 해결하여 사용자가 관심 있는 정보를 정확하게 추천하기 위한 것이다. 개인화 추천의 주요 아이디어는 사용자의 과거 조작 행동에 따라 사용자의 관심과 선호도를 분석한 다음 사용자가 더 관심이 있지만 조작 행동이 없는 항목을 사용자에게 추천하는 것입니다. 개인화 추천도 사용자 조작 행태 변화에 따라 사용자 선호도가 높은 아이템을 실시간으로 분석하여 추천할 수 있어 사용자가 웹사이트에 밀착되어 사용자 충성도를 높이고 가맹점으로 트래픽을 유도하여 가맹점 수익을 더욱 높일 수 있습니다. 가치는 상생 목표를 달성할 수 있습니다.

협업 필터링 알고리즘의 3원리

3.1 사용자 기반 협업 필터링 추천 알고리즘의 구현 원리

기존의 사용자 기반(User-Based) 협업 필터링 추천 알고리즘 구현 원리는 4단계로 나뉩니다.

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단계

항목 평가를 예측하고 추천합니다. 가장 일반적으로 사용되는 예측 공식은 그림에 나와 있습니다.

여기에 이미지 설명 삽입

참고: 이 공식은 실제로 유사성과 점수의 가중 평균입니다. 여기에 이미지 설명 삽입항목 i에 대한 사용자 u의 예측 점수를 나타내며, n은 가장 가까운 이웃 집합이고, v는 임의의 가장 가까운 이웃이며, 가장 가까운 이웃 v와 대상 사용자 u 사이의 유사도에 항목 i에 대한 가장 가까운 이웃 v의 점수를 곱한 값을 나타냅니다. 예측 점수를 얻은 후 점수에 따라 내림차순으로 추천합니다.

4 시스템 구현

4.1 개발 환경

  • 파이썬3.8,
  • 장고3,
  • mysql8,
  • navicat 데이터베이스 관리 도구,
  • HTML 페이지,
  • javascript 각본,
  • jquery 스크립트,
  • 부트스트랩 프런트엔드 프레임워크,
  • 레이어 팝업창 구성요소 등

4.2 시스템 기능 설명

시스템 코드 디렉토리
여기에 이미지 설명 삽입

프로젝트 기능

  • 앞 페이지 주소: http://127.0.0.1:8000/
  • 배경 홈페이지 주소: http://127.0.0.1:8000/admin
  • 관리자 계정: admin 관리자 비밀번호: admin
  • 포그라운드 사용자에는 등록, 로그인, 로그아웃, 영화 브라우징, 영화 검색, 정보 수정, 영화 등급, 개인화된 영화 추천 및 기타 기능이 포함됩니다.
  • 백그라운드 관리자에는 사용자 관리, 영화 관리, 영화 유형 관리, 등급 관리, 권한 관리 등이 포함됩니다.

개인화 추천 기능

관광객은 핫스팟 추천(전체 영화 시청률 내림차순으로 추천)을 이용하고,

사용자 로그인 후 사용자의 평점 기록을 기준으로 영화를 먼저 추천하고, 사용자 기반의 협업 필터링 추천 알고리즘을 이용하여 추천 결과가 없을 경우 핫 추천 이용(전체 영화 평점 내림차순으로 추천)

알고리즘의 구현은 일반 파이썬 함수를 사용하며 알고리즘의 단계에 따라 엄격하게 구현됩니다.

예:

사용자 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 레이블 레이아웃을 사용하고 양식 레이블은 로그인 이름과 로그인 비밀번호를 제출합니다. 로그인할 때 Jquery 스크립트는 로그인 이름 또는 로그인 비밀번호가 비어 있는지 확인합니다. 비어 있으면 다음을 제공합니다. 로그인 작업을 취소하라는 메시지가 표시됩니다. 로그인에 성공하면 성공적인 로그인 메시지도 표시됩니다.

여기에 이미지 설명 삽입

5.2 시스템 홈페이지 디자인

홈페이지는 DIV 라벨 레이아웃을 사용하여 헤드페이지, 중간페이지, 하단페이지로 구분되며, 헤드페이지는 웹사이트명, 검색창, 등록버튼, 로그인버튼, 사용자명, 로그아웃버튼, 영화종류 등을 포함하는 공개페이지입니다. 등, 중간 페이지 콘텐츠 페이지입니다. 페이지마다 다른 콘텐츠가 표시됩니다. 하단 페이지도 공개 페이지입니다. Django의 include 명령을 사용하여 헤더 및 하단 페이지를 가져옵니다.

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

5.3 영화 정보 페이지 디자인

영화 상세 페이지는 DIV 태그 레이아웃을 사용하며, 헤더와 하단 페이지는 Django의 include 명령을 통해 소개되며, 콘텐츠 페이지에는 영화 표지, 영화 이름, 영화 종류, 영화 소개, 별점 5점 버튼이 표시됩니다. 현재 로그인한 사용자가 영화를 평가하지 않은 경우 오각형의 색상이 회색으로 표시되고, 사용자 등급이 있는 경우 등급에 따라 노란색 오각형의 특정 개수가 표시됩니다. 다섯개 별표 채점 기능은 Jquery의 비율 스크립트 구성 요소를 사용합니다.

여기에 이미지 설명 삽입

5.4 코드 구현

5.4.1 장고 구성

Django는 Python으로 작성된 오픈 소스 웹 애플리케이션 프레임워크입니다. MTV의 프레임워크 패턴, 즉 모델 M, 뷰 V 및 템플릿 T가 채택됩니다. Django 프레임워크 프로젝트는 Pycharm 도구를 통해 쉽게 생성할 수 있으며 초기 프로젝트에는 주로 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 파일이며 기본 경로는 프로젝트 루트 경로의 템플릿 폴더에 있습니다. Django 템플릿에는 주로 두 가지 특수 기호가 있습니다. { { }} 및 {% %}, { { }}는 변수가 요청, 세션 및 응용 프로그램에서 변수를 직접 얻을 수 있으며 템플릿이 있을 때 값으로 대체할 수 있음을 의미합니다. 렌더링, {% % }는 논리 관련 작업을 나타내며 Python 코드를 직접 작성할 수 있습니다. 그림 5.5는 전경 index.html 구성의 일부입니다.

여기에 이미지 설명 삽입

5.6 사용자 로그인 기능 구현

사용자가 로그인 페이지에서 로그인에 실패하면 로그인 실패 이유를 묻는 메시지가 표시되고 사용자가 성공적으로 로그인하면 페이지를 건너뛰고 있다는 메시지가 표시됩니다. 사용자 로그인 구현 코드는 그림과 같습니다.

여기에 이미지 설명 삽입

5.7 이미지 업로드 기능 구현

이 시스템의 이미지 업로드 기능은 Django 백그라운드 프레임워크의 Model 컴포넌트에 의해 구현되며 엔티티 클래스의 속성 유형은 이미지 유형으로 모델 파일에 직접 선언됩니다. 이미지 업로드 기능 코드는 그림과 같습니다.

여기에 이미지 설명 삽입

5.8 개인화 추천 기능 구현

사용자 기반 협업 필터링 추천 알고리즘의 구현은 3단계로 나눌 수 있다: 첫째, 사용자 영화 평가 데이터는 사용자-영화 평가 매트릭스로 구성되고, 사용자 유사도가 가장 높은 TopN 가까운 이웃 사용자, 그리고 다음으로 계산된다. TopN 이웃 사용자와 영화의 유사도를 가중 평균하여 K개의 추천 영화를 얻습니다.

여기에 이미지 설명 삽입

여기에 이미지 설명 삽입

5 마지막

Supongo que te gusta

Origin blog.csdn.net/HUXINY/article/details/129484952
Recomendado
Clasificación