Bi は協調フィルタリング映画レコメンデーション システムをセットアップしました

1 はじめに

今日は、先輩が先輩に手伝ってもらった卒業制作の企画を紹介します。

協調フィルタリングに基づく映画推薦システム

1 設計概要

21世紀は情報化の時代であり、情報技術やネットワーク技術の発達により、人々の日常生活のあらゆる場面に情報化が浸透し、いつでもどこでも膨大な量の情報を閲覧できるようになりました。面倒なスクリーニングが必要. 好きなデータや興味のあるデータを特定する. オンライン動画サービスでは、優れた協調フィルタリングレコメンデーション機能を利用してシステム全体を支援する必要があります。

先輩が設計したシステムは Python 技術に基づいており、モデルには UML を使用し、設計には Django フレームワークの組み合わせを採用し、データを保存するには Mysql データベースを採用しています。このシステムの主な機能には、ユーザー登録、ログイン、情報保守、映画の検索、映画の評価、パーソナライズされたレコメンデーション、および管理者による情報管理が含まれます。

パーソナライズされたレコメンデーション機能は、ユーザーベースの協調フィルタリング アルゴリズムとホット スポット レコメンデーションによって実現されます。主な開発ツールには、Pycharm、Python3.8、Django3、mysql8、Navicat などがあります。

映画のオンライン推奨システムは、映画管理の効率を大幅に改善し、大多数のユーザーの基本的なニーズを満たします。

ここに画像の説明を挿入

2 主題の背景と目的

ネットワーク技術と情報技術の発展に伴い、Tencent Video、Youku Video、iQiyi Video など、さまざまな映画 Web サイトが徐々に出現しています。人々はいつでもどこでも膨大な量の情報を閲覧できますが、これらの大量の情報は多岐にわたり、好きなデータや関心のあるデータをフィルタリングして特定するために多大な労力を費やす必要があります。

このトピックは、主に映画 Web サイトのパーソナライズされたレコメンデーション機能を解決して、ユーザーが興味のある情報を正確にレコメンドすることを目的としています。パーソナライズされたレコメンデーションの主なアイデアは、ユーザーの過去の操作行動に従ってユーザーの興味や好みを分析し、ユーザーがより興味を持っているが操作行動がないアイテムをユーザーにレコメンドすることです。パーソナライズされたレコメンデーションは、ユーザーの操作行動の変化に応じて、ユーザーの嗜好性の高いアイテムをリアルタイムで分析および推奨することもできるため、ユーザーは Web サイトに固執し、ユーザーのロイヤルティを向上させ、マーチャントにトラフィックをもたらし、マーチャントの利益をさらに増加させることができます。価値は双方にとって好都合な目標を達成できます。

3 協調フィルタリングアルゴリズムの原理

3.1 ユーザベース協調フィルタリング推薦アルゴリズムの実装原理

従来のユーザーベース (ユーザーベース) の協調フィルタリング推奨アルゴリズムの実装原理は、次の 4 つのステップに分かれています。

3.1.1 ステップ 1

ユーザーの過去の行動情報に基づいて、ユーザーとアイテムの評価マトリックスを構築します. ユーザーの過去の行動情報には、アイテムの評価、閲覧履歴、コレクションの履歴、お気に入りのタグなどが含まれます. この記事では、単一のアイテムの評価を例として取り上げ、後で他の行動情報を紹介します.および混合行動情報. ユーザー - アイテムのスコアリング マトリックスを表 1 に示します。

ここに画像の説明を挿入

注: ユーザー A はアイテム 1 を 1 ポイントと評価し、ユーザー A はアイテム 2 を評価なしで評価しました。

3.1.2 ステップ 2

ユーザーとアイテムの評価マトリックスに基づいて、ユーザー間の類似性を計算します。類似度を計算するために一般的に使用される方法には、コサイン アルゴリズム、修正コサイン アルゴリズム、ピアソン アルゴリズムなどがあります。コサイン アルゴリズムの式を図 1 に示します。

ここに画像の説明を挿入

ここに画像の説明を挿入

3.1.3 ステップ 3

ユーザ間の類似度に従って、対象ユーザの最近傍 KNN が取得されます。KNN のスクリーニングには一般的に 2 つの方法があり、1 つは類似度のしきい値を設定する方法 (類似度の下限を与え、下限よりも大きい類似度を最近傍とする) と、2 つの類似度に基づいて選択する方法です。上位 N 個の最近傍 (今回は前の N 個を例に取り、2 つを比較して後で詳しく説明します)。類似性ソートでは、従来のバブル ソート方法を使用できます。

3.1.4 ステップ 4

アイテムの評価を予測し、推奨事項を作成します。最も一般的に使用される予測式を図に示します。

ここに画像の説明を挿入

注: この数式は、実際には類似度とスコアの加重平均です。ここに画像の説明を挿入アイテム i のユーザー u の予測スコアを示します。n は最近傍セット、v は任意の最近傍であり、アイテム i の最近傍 v のスコアを乗算した最近傍 v とターゲット ユーザー u の間の類似度を表します。予測スコアが得られた後、スコアに応じて降順でレコメンデーションが行われます。

4 システムの実装

4.1 開発環境

  • Python3.8、
  • ジャンゴ3,
  • mysql8、
  • navicat データベース管理ツール,
  • htmlページ、
  • javascript脚本,
  • jqueryスクリプト、
  • ブートストラップ フロントエンド フレームワーク、
  • レイヤーポップアップウィンドウコンポーネントなど

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 は推奨するムービー 2 をユーザー C に

4.3 システムデータの流れ

映画オンライン推薦システムは、主に利用者端末と管理者端末から構成される。クライアント側は主にユーザー登録、ログイン、情報整備、動画検索、動画視聴、動画評価、個人おすすめなどを担当。 管理者側は管理者ログイン、情報整備、ユーザー管理、動画種別管理、動画管理を担当、評価管理等。

4.3.1 クライアントのデータフロー

クライアント側の基本的なプロセスには、次の 4 つの手順があります。

  • 1. ユーザーは、システムのホームページで映画を閲覧したり、映画を検索したり、パーソナライズされた推奨事項を作成したりできます。
  • 2. ユーザーは、ユーザー名、年齢、性別、メールアドレス、ログインパスワードを入力して登録します。
  • 3. ユーザーが正常に登録されたら、正しいログイン資格情報を入力してシス​​テムに入ります.ログイン資格情報が正しくない場合、システムは自動的にログインページに戻り、ユーザーがログインに成功するまでログイン情報を再入力するように求めます.システムに。
  • 4. システムへの入力に成功すると、ユーザーは映画の採点、情報の変更、パーソナライズされたおすすめの作成を行うことができます。

具体的には次の図のようになります。

ここに画像の説明を挿入

4.3.2 管理者のデータフロー

管理者側の基本的なプロセスには、次の 3 つの手順があります。

1. 管理者は、正しいログイン資格情報を入力してシス​​テムに入る. ログイン資格情報が正しくない場合、システムは自動的にログイン ページに戻り、管理者がシステムに正常にログインするまで、ログイン情報を再入力するよう管理者に求める. .
2. 管理者がシステムに正常に入力すると、ホームページにユーザー数、映画の種類の数、映画の数、評価の数などの統計情報が表示されます。
3. 管理者には、ユーザー管理、動画タイプ管理、動画管理、スコア管理などの機能があります。

上記のプロセスに従って、次の図に示すように、管理者のデータ フロー チャートを取得できます。

ここに画像の説明を挿入

4.4 システム機能設計

映画のオンライン推薦システムは主にユーザー側と管理者側のモジュールで構成されており、各モジュールの下には多くの小さなモジュールがあり、各モジュールの機能は異なりますが、それらの間には一定の関係があります.図に示すように、上記のモジュールの連絡先とシステム要件、システムの機能アーキテクチャを取得できます

ここに画像の説明を挿入

5 メインページのデザイン

5.1 ログインページのデザイン

The user login page uses the DIV label layout, and the Form label submits the login name and login password. ログイン時に、Jquery スクリプトはログイン名またはログイン パスワードが空かどうかを確認します。ログイン操作をキャンセルするためのプロンプト。ログインが成功すると、成功したログイン プロンプトも表示されます。

ここに画像の説明を挿入

5.2 システムホームページのデザイン

トップページはDIVラベルレイアウトを採用し、トップページ、ミドルページ、ボトムページに分かれており、トップページは公開ページで、サイト名、検索ボックス、登録ボタン、ログインボタン、ユーザー名、ログアウトボタン、動画の種類などを含むなど、中ページはコンテンツページです. 異なるページは異なるコンテンツを表示します. 下部ページも公開ページです. Django の include コマンドを使用してヘッダーと下部ページをインポートします.

ここに画像の説明を挿入

ここに画像の説明を挿入

5.3 映画の詳細ページのデザイン

映画の詳細ページは DIV タグ レイアウトを使用し、ヘッダー ページとボトム ページは Django の include コマンドによって紹介され、コンテンツ ページには映画の表紙、映画の名前、映画の種類、映画の紹介、星 5 つ星の評価ボタンが表示されます。現在ログインしているユーザーが映画を評価していない場合、五芒星の色は灰色で、ユーザーの評価がある場合は、評価に応じて特定の数の黄色の五芒星が表示されます。五芒星のスコアリング関数は、Jquery の rate スクリプト コンポーネントを使用します

ここに画像の説明を挿入

5.4 コードの実装

5.4.1 ジャンゴの設定

Django は、Python で記述されたオープン ソースの Web アプリケーション フレームワークです。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 ファイルで、デフォルト パスはプロジェクト ルート パスの templates フォルダーにあります。 Django テンプレートには、主に { { }} と {% %} の 2 つの特殊記号があります。 { { }} は、変数がリクエスト、セッション、およびアプリケーションで変数を直接取得し、テンプレートが使用されているときに値に置き換えることができることを意味します。 {% % } はロジック関連の操作を表し、Python コードを直接記述できます。図 5.5 は、前景の index.html の構成の一部です。

ここに画像の説明を挿入

5.6 ユーザーログイン機能の実現

ユーザーがログイン ページでログインに失敗した場合は、ログイン失敗の理由が表示され、ユーザーが正常にログインした場合は、ページがジャンプされていることが表示されます。ユーザー ログインの実装コードは、図に示すとおりです。

ここに画像の説明を挿入

5.7 画像アップロード機能の実現

本システムの画像アップロード機能はDjangoバックグラウンドフレームワークのModelコンポーネントで実現されており、エンティティクラスの属性型は画像型としてモデルファイルに直接宣言されています。画像アップロード関数のコードは、図に示すとおりです。

ここに画像の説明を挿入

5.8 パーソナライズされたレコメンド機能の実現

ユーザーベースの協調フィルタリング推奨アルゴリズムの実現は、3 つのステップに分けることができます: 最初に、ユーザーの映画評価データがユーザー映画評価マトリックスに構築されます; 最高のユーザー類似性を持つ TopN 最近傍ユーザーを計算し、次に、 TopN の近隣ユーザーと映画の類似度の加重平均を計算し、最終的に K 個のおすすめの映画を取得します。

ここに画像の説明を挿入

ここに画像の説明を挿入

5 ラスト

おすすめ

転載: blog.csdn.net/HUXINY/article/details/129484952