深度学习的协同过滤的推荐算法-毕设神器

简介: 深度学习的协同过滤的推荐算法-毕设神器


在当今的电子商务和娱乐平台中,个性化推荐系统已经成为了一种不可或缺的功能。本文将介绍如何使用Python实现协同过滤推荐算法,以便为用户提供个性化的商品推荐。


数据准备

我将使用一个包含用户ID、商品ID和评分的CSV文件作为我的数据源。我将会介绍如何加载和预处理这些数据,以便于用于训练和测试我的推荐模型。


模型训练

我将使用Surprise库来构建和训练协同过滤推荐模型。将详细介绍数据加载、参数调优、模型训练和评估等步骤,以确保我的模型能够在真实数据上取得良好的表现。


模型保存

一旦我训练好了模型,需要将其保存到文件中,以便之后的使用。我将展示如何将训练好的模型保存到磁盘中,并将模型的评估结果保存为JSON文件。


模型使用

最后,将展示如何加载保存的模型,并使用它为特定用户生成推荐。我将展示如何将训练好的模型应用到实际的推荐系统中。


下面是一个更为复杂的训练模块示例:

import os
import pandas as pd
from surprise import Dataset, Reader
from surprise import KNNWithMeans, SVD, NMF
from surprise import dump
from surprise.model_selection import cross_validate, GridSearchCV
from surprise.accuracy import rmse, mae
import json
import logging
# 设置日志记录
logging.basicConfig(level=logging.INFO, filename='training.log', filemode='w',
                    format='%(name)s - %(levelname)s - %(message)s')
# 数据预处理
def data_preprocessing(df):
    # 这里可以添加任何数据预处理步骤,例如:
    # 1. 删除重复项
    # 2. 处理缺失值
    # 3. 归一化或标准化
    # 4. 数据转换
    # 为了示例,我们只是简单地返回原始DataFrame
    return df
# 载入数据
def load_data(file_path):
    df = pd.read_csv(file_path)
    df = data_preprocessing(df)
    reader = Reader(line_format='user item rating', sep=',', skip_lines=1)
    data = Dataset.load_from_df(df[['user_id', 'item_id', 'rating']], reader)
    return data
# 参数调优
def tune_parameters(data, algo_class, param_grid, cv=3):
    gs = GridSearchCV(algo_class, param_grid, measures=['rmse', 'mae'], cv=cv)
    gs.fit(data)
    return gs.best_params['rmse'], gs.best_estimator['rmse']
# 训练模型
def train_model(data, algo):
    trainset = data.build_full_trainset()
    algo.fit(trainset)
    return algo
# 评估模型
def evaluate_model(algo, data):
    results = cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)
    logging.info(results)
    return results
# 保存模型和评估结果
def save_model_and_results(model, results, model_filename, results_filename):
    dump.dump(model_filename, algo=model)
    with open(results_filename, 'w') as f:
        json.dump(results, f)
# 主程序
def main():
    file_path = 'ratings.csv'  # 这里填写你的CSV文件路径
    model_filename = 'collaborative_filtering_model.pickle'  # 模型保存文件名
    results_filename = 'model_results.json'  # 保存模型评估结果的文件名
    data = load_data(file_path)
    # 定义多个算法及其参数网格进行调优
    algorithms = {
        'KNNWithMeans': {
            'algo': KNNWithMeans,
            'params': {
                'k': [10, 20, 30],
                'sim_options': {'name': ['cosine', 'pearson'], 'user_based': [True, False]}
            }
        },
        'SVD': {
            'algo': SVD,
            'params': {
                'n_factors': [50, 100, 150],
                'n_epochs': [20, 30],
                'lr_all': [0.005, 0.01],
                'reg_all': [0.02, 0.1]
            }
        },
        'NMF': {
            'algo': NMF,
            'params': {
                'n_factors': [15, 20, 25],
                'n_epochs': [50, 100],
            }
        }
    }
    # 保存最佳模型的信息
    best_model_info = {}
    # 对每个算法进行参数调优
    for algo_name, algo_data in algorithms.items():
        logging.info(f"开始参数调优: {algo_name}")
        best_params, best_algo = tune_parameters(data, algo_data['algo'], algo_data['params'])
        logging.info(f"最佳参数:{best_params}")
        logging.info(f"开始训练模型: {algo_name}")
        model = train_model(data, best_algo)
        
        logging.info(f"开始评估模型: {algo_name}")
        results = evaluate_model(model, data)
        # 如果当前模型是最优模型,则保存
        if not best_model_info or best_model_info['best_score'] > results['test_rmse'].mean():
            best_model_info = {
                'algorithm': algo_name,
                'best_score': results['test_rmse'].mean(),
                'best_params': best_params,
                'best_estimator': best_algo
            }
    # 保存最佳模型和评估结果
    save_model_and_results(
        best_model_info['best_estimator'],
        best_model_info,
        model_filename,
        results_filename
    )
    logging.info(f"模型已训练并保存为: {model_filename}")
    logging.info(f"模型评估结果已保存为: {results_filename}")
if __name__ == "__main__":
    main()

我对三种不同的推荐算法进行了参数调优,并选择了其中最佳的模型。我们还将模型的评估结果和最佳参数配置保存到了JSON文件中,并通过日志文件记录了整个训练过程的详细信息。


这个实现方式不仅增加了代码的行数和复杂性,还提供了更多的灵活性和可维护性,可以很容易地扩展到其他推荐算法和参数搜索空间。此外,通过日志记录,我们可以更好地监控模型训练过程,以便于调试和性能分析。


目录
相关文章
|
1月前
|
机器学习/深度学习 搜索推荐 算法
协同过滤算法
协同过滤算法
77 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
142 63
|
8天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
36 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
8天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
28 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
8天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
43 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 数据采集 算法
如何在一夜之间成为模型微调大师?——从零开始的深度学习修炼之旅,让你的算法功力飙升!
【10月更文挑战第5天】在机器学习领域,预训练模型具有强大的泛化能力,但直接使用可能效果不佳,尤其在特定任务上。此时,模型微调显得尤为重要。本文通过图像分类任务,详细介绍如何利用PyTorch对ResNet-50模型进行微调,包括环境搭建、数据预处理、模型加载与训练等步骤,并提供完整Python代码。通过调整超参数和采用早停策略等技巧,可进一步优化模型性能。适合初学者快速上手模型微调。
95 8
|
1月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
93 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
机器学习/深度学习 算法
深度学习中的优化算法及其应用
本文探讨了深度学习中常用的优化算法,包括梯度下降、随机梯度下降、动量方法和Adam方法。通过对比这些算法的优缺点及适用场景,帮助读者更好地理解和应用这些优化方法。
30 2
|
2月前
|
机器学习/深度学习 算法 计算机视觉
深度学习之图像修复算法
基于深度学习的图像修复算法旨在通过学习和生成模型来填补图像中的缺失或损坏部分。
75 7