推荐引擎:基于余弦相似度书籍推荐Python实现

简介: 推荐引擎:基于余弦相似度书籍推荐Python实现
# -*- coding: utf-8 -*-
# @Date    : 2019-02-14
# @Author  : Peng Shiyu
from copy import deepcopy
import numpy as np
from sklearn.feature_extraction import DictVectorizer
from sklearn.metrics.pairwise import cosine_similarity
# 数据准备:{书名: 评分}
# user = {"红楼梦", "西游记", "水浒传", "三国演义"}
user1 = {"红楼梦": 4, "西游记": 3}
user2 = {"红楼梦": 5, "西游记": 6, "水浒传": 3}
user3 = {"红楼梦": 4, "西游记": 3, "三国演义": 5}
user4 = {"西游记": 4, "三国演义": 5}
data = [
    user1,
    user2,
    user3,
    user4
]
# 特征提取
dict_vectorizer = DictVectorizer(dtype=np.int32, sparse=False)
result = dict_vectorizer.fit_transform(data)
books = dict_vectorizer.get_feature_names()
print(dict_vectorizer.get_feature_names())
print(result)
# 余弦相似度矩阵
user_similarity = cosine_similarity(result)
print(user_similarity)
for user_id, user_looked in enumerate(data):
    user_suggest = user_similarity[user_id].tolist()
    # 找到与之相似度最高的两个人
    user_suggest_bak = deepcopy(user_suggest)
    user_suggest_bak.sort(reverse=True)
    max_similar = user_suggest_bak[1: 3]
    print(max_similar)
    max_index = list(map(user_suggest.index, max_similar))
    print(max_index)
    suggest = {}
    for index, user in enumerate([data[i] for i in max_index]):
        for key, value in user.items():
            if key not in user_looked:
                suggest[key] = user_suggest[index] * value
    print(suggest)
"""
['三国演义', '水浒传', '红楼梦', '西游记']
[[0 0 4 3]
 [0 3 5 6]
 [5 0 4 3]
 [5 0 0 4]]
[[1.         0.90837374 0.70710678 0.37481703]
 [0.90837374 1.         0.64231723 0.44799204]
 [0.70710678 0.64231723 1.         0.81719329]
 [0.37481703 0.44799204 0.81719329 1.        ]]
[0.9083737430941391, 0.7071067811865475]
{'水浒传': 3.0, '三国演义': 4.541868715470695}
[0.9083737430941391, 0.6423172335936725]
{'三国演义': 4.999999999999999}
[0.8171932929538644, 0.7071067811865475]
{}
[0.8171932929538644, 0.44799203576793445]
{'红楼梦': 2.2399601788396724, '水浒传': 1.3439761073038032}
"""

参考:

推荐算法和机器学习系列 - 协同过滤推荐算法和余弦相似性算法

相关文章
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
291 102
|
3月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
314 104
|
3月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
262 103
|
3月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
193 82
|
2月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
179 3
|
2月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
435 3
|
2月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
266 3
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
265 0
|
3月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的多面手
Python:现代编程的多面手
83 0
|
3月前
|
存储 人工智能 算法
Python实现简易成语接龙小游戏:从零开始的趣味编程实践
本项目将中国传统文化与编程思维相结合,通过Python实现成语接龙游戏,涵盖数据结构、算法设计与简单AI逻辑,帮助学习者在趣味实践中掌握编程技能。
334 0

推荐镜像

更多