IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 2021CCF BDCI图书推荐系统竞赛baseline -> 正文阅读

[人工智能]2021CCF BDCI图书推荐系统竞赛baseline

比赛地址

这是用最基本的基于物品协同过滤算法实现的图书推荐。

1. 导包

import random
import numpy as np
import pandas as pd

import math
from operator import itemgetter
import logging 
logging.basicConfig(level=logging.INFO, format='%(asctime)-15s %(levelname)s: %(message)s')

2. 读取数据

path = '/Users/Desktop/比赛/图书推荐系统'
train = pd.read_csv(path + '/dataset/train_dataset.csv')
test = pd.read_csv(path + '/dataset/test_dataset.csv')
sub = pd.read_csv(path + '/dataset/submission.csv')

logging.info("打印完毕")
data = train.copy()
data['rating'] = 1
data.head(5)
data.pivot(index='user_id', columns='item_id', values='rating')   # 这样会发现有大量的稀疏, 所以才会用字典进行存放

请添加图片描述

3. 切分数据集

trainSet, testSet = {}, {}
trainSet_len, testSet_len = 0, 0
pivot = 0.75    # 训练集的比例

# {user: {item_id: rating}}
for ele in data.itertuples(): 
    user, item, rating = getattr(ele, 'user_id'), getattr(ele, 'item_id'), getattr(ele, 'rating')
    if random.random() < pivot:
        trainSet.setdefault(user, {})
        trainSet[user][item] = rating
        trainSet_len += 1
    else:
        testSet.setdefault(user, {})
        testSet[user][item] = rating 
        testSet_len += 1

4. 计算item相似度

item_popular = {}
for user, item in trainSet.items():   # item:{movieID: rating}
    for item in items:      
        if item not in item_popular:     
            item_popular[item] = 0  
        item_popular[item] += 1


item_count = len(item_popular)
print('Total movie number = %d' % movie_count)

# 下面建立item相似矩阵
print('Build user co-rated items matrix ...')
item_sim_matrix = {}
for user, items in trainSet.items():  
    for m1 in items:           # 对于每个item, 都得双层遍历
        for m2 in items:
            if m1 == m2:
                continue
            item_sim_matrix.setdefault(m1, {}) 
            item_sim_matrix[m1].setdefault(m2, 0)
            item_sim_matrix[m1][m2] += 1     # 这里统计两个电影被同一个用户产生行为的次数, 这个就是余弦相似度的分子

# 计算电影之间的相似性
for m1, related_items in item_sim_matrix.items():
    for m2, count in related_items.items():    # 这里面m2是相关电影, count是共同被同一个用户打分的次数
        # 这里item的用户数为0处理
        if item_popular[m1] == 0  or item_popular[m2] == 0:
            item_sim_matrix[m1][m2] = 0
        else:
            item_sim_matrix[m1][m2] = count / math.sqrt(item_popular[m1] * item_popular[m2])  

5. 生成推荐list

user_lst = test['user_id'].tolist()

# 找到最相似的K个item, 最终推荐n个给用户
k = 198
n = 10
result = []
for user in user_lst:
    rank ={}
    watched_items = trainSet[user]     # 找出目标用户看过的书籍

    for item, rating in watched_movies.items():
        #遍历与物品item最相似的前k个产品,获得这些物品及相似分数
        for related_item, w in sorted(item_sim_matrix[item].items(), key=itemgetter(1), reverse=True)[:k]:
            # 若该物品用户看过则不推荐
            if related_item in watched_items:
                continue
        
            # 计算用户user对related_item的偏好值, 初始化该值为0
            rank.setdefault(related_item, 0)
            #通过与其相似物品对物品related_item的偏好值相乘并相加。
            #排名的依据—— > 推荐书籍与该已看书籍的相似度(累计) * 用户对已看书籍的评分
            rank[related_item] += w * float(rating)
    
    # 产生最后的推荐列表
    rec_items = sorted(rank.items(), key=itemgetter(1), reverse=True)[:n] 
    for i in list(rec_items):
        result.append(i)

6. 生成提交文件

r = []
for i in result:
   r.append(i[0]) 
sub['item_id'] = r
sub
sub.to_csv(path + '/result/ItemCF.csv')

线上得分:0.02109538784

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:07:06  更:2021-11-25 08:07:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:36:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码