美文网首页
32. 日月光华 Python数据分析 - 机器学习 - 基于用

32. 日月光华 Python数据分析 - 机器学习 - 基于用

作者: 薛东弗斯 | 来源:发表于2023-07-30 22:39 被阅读0次

推荐算法背后的原理


image.png
image.png
image.png
image.png
image.png
image.png

基于物品的协同过滤
基于用户的协同过滤

import pandas as pd
import numpy as np

# 下面是 A、B、C、D 四位顾客对 one 到 seven 总共 7 件商品的评分表
data = pd.DataFrame({'one': [4, np.nan, 2, np.nan],
                     'two': [np.nan, 4, np.nan, 5],
                     'three': [5, np.nan, 2, np.nan],
                     'four': [3, 4, np.nan, 3],
                     'five': [5, np.nan, 1, np.nan],
                     'six': [np.nan, 5, np.nan, 5],
                     'seven': [np.nan, np.nan, np.nan, 4]},
                     index = list('ABCD'))

data  # 用户的评分矩阵(效用矩阵)
image.png
# 目标:
# 1.我们要寻找 A 最相似的其他顾客(A喜欢某商品,推荐给与A有类似兴趣的其它顾客)
# 2.预测 A 对 two商品的评分,从而做出是否推荐的判断

from sklearn.metrics.pairwise import cosine_similarity

# loc:基于索引取值
# iloc:基于位置取值
# 计算A/B两个评分向量的相似性
sim_AB = cosine_similarity(data.loc['A', :].fillna(0).values.reshape(1, -1), 
                           data.loc['B', :].fillna(0).values.reshape(1, -1))

sim_AB
# array([[0.18353259]])

# 计算A/C两个评分向量的相似性
sim_AC = cosine_similarity(data.loc['A', :].fillna(0).values.reshape(1, -1), 
                           data.loc['C', :].fillna(0).values.reshape(1, -1))

sim_AC
# array([[0.88527041]])
# 结合原始数据,发现当A给某产品打高分的时候,C打了很低的份,即A与C的行为完全相反。而此处的得分却很高,显然不合理。
# 问题出在哪里? 处在我们对NaN值的处理,只有我们非常不喜欢某商品时才会给0分,即0并不是一个中立的得分,直接填充0会引入负面评价。
# 结合数据,对于two/six/seven,A C均为NaN值,都填充为0,因此会带来很好的相似性。

去中心化:
1- 用户对某一产品的得分 - 该用户对所有产品评分的均值。 如果此时再填入0,则0是中性值,不会引入负面评价。
2- 引入公平的评价。 比如A用户,给所有商品都打高分;C用户比较严苛,给所有产品都打低分。 引入去中心化,则会抹平不同用户对商品打分的严苛程度差异。

data_center = data.apply(lambda x: x-x.mean(), axis=1)    # 每一行,每个位置减去它在该行的均值
data_center  # 去中心化的data
image.png
sim_AB = cosine_similarity(data_center.loc['A', :].fillna(0).values.reshape(1, -1), 
                           data_center.loc['B', :].fillna(0).values.reshape(1, -1))

sim_AB
# array([[0.30772873]])

sim_AC = cosine_similarity(data_center.loc['A', :].fillna(0).values.reshape(1, -1), 
                           data_center.loc['C', :].fillna(0).values.reshape(1, -1))

sim_AC
# array([[-0.24618298]])
# 此时,得分与评分矩阵的直观映像符合

sim_AD = cosine_similarity(data_center.loc['A', :].fillna(0).values.reshape(1, -1), 
                           data_center.loc['D', :].fillna(0).values.reshape(1, -1))

sim_AD
# array([[0.56818182]])

# 计算A用户对Two商品的评分,从而做出是否推荐的判断
# 从上面计算可知,A与B/D相似,与C完全相反/不相似
# 利用相似产品的评分,来计算A对于two的评分
# (AD的相似度*用户D对two商品的评分 + AB的相似度*用户B对于商品two的评分)/(AD的相似度 + AB的相似度)
(sim_AD*data.loc['D', 'two'] + sim_AB*data.loc['B', 'two'])/(sim_AD + sim_AB)
# array([[4.64867562]])

相关文章

  • Python数据分析——数据预处理的方法

    前言 1. 关于数据集 数据来源:日月光华老师的《Python数据分析从入门到机器学习》的 lianjia 数据。...

  • 链家数据分析二-数据分组处理

    关于  学习日月光华老师的《Python数据分析从入门到机器学习》,通过写该文来巩固数据分析中使用的知识点。主要是...

  • 链家数据--房子单价离散区间直方图展示

    关于学习日月光华老师的《Python数据分析从入门到机器学习》,通过写该文来巩固数据分析中使用的知识点。主要是针对...

  • 天气分析

    运用机器学习基于大数据分析

  • python3之sklearn示例学习

    scikit-learn(含API) 是基于 Python 语言的机器学习工具1.简单高效的数据挖掘和数据分析工具...

  • numpy+mkl 安装文件whl

    scikit-learn 是基于 Python 语言的机器学习工具简单高效的数据挖掘和数据分析工具可供大家在各种环...

  • 2021新书:《Python机器学习算法与实战》

    本书基于Python语言,结合实际的数据集,介绍如何使用机器学习与深度学习算法,对数据进行实战分析。本书在内容上循...

  • 无标题文章

    Python Python机器学习的库:scikit-learn2.1: 特性:简单高效的数据挖掘和机器学习分析对...

  • 无标题文章

    Python Python机器学习的库:scikit-learn2.1: 特性:简单高效的数据挖掘和机器学习分析对...

  • 6决策树应用

    1. Python 2. Python机器学习的库:scikit-learn 简单高效的数据挖掘和机器学习分析对...

网友评论

      本文标题:32. 日月光华 Python数据分析 - 机器学习 - 基于用

      本文链接:https://www.haomeiwen.com/subject/lfqjpdtx.html