你的抖音,你的小视频,你的淘宝是不是总会给你推荐一些东西呢?LFM隐语义模型了解下

算法帝国:今日头条、抖音推荐算法原理全文详解 针对以上面试题,小编已经把面试题+答案整理好了。 阅读详情

微信公众号:大数据左右手
专注于大数据技术,人工智能和编程语言
个人既可码代码也可以码文字。欢迎转发与关注
关注我,在公众号回复 “机器学习” 可领取电子书

###什么是隐语义模型LFM
协同过滤算法主要包括基于用户的协同过滤(User-Based CF)、基于物品的协同过滤(Item-Based CF)、隐语义模型(Latent Factor Model)等。其中基于用户和物品的协同过滤是通过统计学方法对数据进行分析的,因此也称为基于内存的协同过滤或基于邻域的协同过滤;隐语义模型是采用机器学习等算法,通过学习数据得出模型,然后根据模型进行预测和推荐,是基于模型的协同过滤

该算法最早在文本领域被提出,用于找到文本的隐含语义。核心思想是通过隐含特征(latent factor)联系用户兴趣和物品(item)。是基于机器学习的方法。找出潜在的主题和分类。基于用户的行为对item进行自动聚类,划分到不同类别/主题,即用户的兴趣。
###简介
这种算法的思想是这样的:每个用户都有自己的爱好和看新闻文字或者视频的习惯,比如用户A喜欢军事类的,打仗的,李云龙等等这些标签,如果这个短视频带有这些元素,那么就将这段短视频推荐给该用户,也就死用这些元素标签去连接用户和短视频作品。每个人对不同的元素偏好不同,而每一个短视频包含的元素也不相同,于是就有了这样的分析:

  • 用户潜在因子矩阵
    表示不同用户对于不同元素的偏好程度,1.代表绝对喜欢,0.代表不喜欢,如表举例
军事娱乐时政历史李云龙
用户A0.70.30.40.80.8
用户B0.80.40.60.70.1
用户C0.50.60.70.30.3
  • 短视频潜在矩阵
    表示每种视频包含各种元素的成分
军事娱乐时政历史李云龙
视频A0.800.40.81
视频B00.800.70
视频C0.500.70.60

利用这两个矩阵,我们可以算出用户A对视频A的喜欢程度
用户A对军事的偏好 * 视频1含有军事成分 + …(一次类推相乘相加)
即为:0.7 * 0.8+0.3 * 0+0.4 * 0.4+0.8 * 0.8+0.8 * 1=2.16

军事娱乐时政历史李云龙
用户A0.70.30.40.80.8
视频A0.800.40.81

按照上面的可以计算出

视频A视频B视频C
用户A2.160.81.11
用户B1.130.811.24
用户C1.160.691.02

因此:我们推荐用户A的短视频是A,对用户B推荐的对视频是B,对用户C推荐的短视频是A

  • 这些潜在因子是怎么到来的呢
    一方面的用户在进入App的时候进行标签的勾选。二是用户的行为数据得出来的分析
    我举个例子吧,不是太准确,这个还是看公司的业务需求,比如短视频看完+5,看一半+3,收藏+3,跳过-2,拉黑-5等等的标准,比如这样的实例
视频A视频B视频C
用户A53-2
用户B3-55
用户C-23-5

然后再根据系统对这条视频进行分类或者什么手段产生因子,根据第二步的实例可以算出用户对某视频的喜欢程度,这样就可以推荐了

###数学算法

LFM算法从数据集中抽取出若干主题,作为user和item之间连接的桥梁,将R矩阵表示为P矩阵和Q矩阵相乘。其中P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度;Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能作为该类的代表。所以LFM根据如下公式来计算用户U对物品I的兴趣度:
在这里插入图片描述

那么,接下去的问题就是如何计算矩阵P和矩阵Q中参数值。一般做法就是最优化损失函数来求参数。在定义损失函数之前,我们需要准备一下数据集并对兴趣度的取值做一说明。
  数据集应该包含所有的user和他们有过行为的(也就是喜欢)的item。所有的这些item构成了一个item全集。对于每个user来说,我们把他有过行为的item称为正样本,规定兴趣度RUI=1,此外我们还需要从item全集中随机抽样,选取与正样本数量相当的样本作为负样本,规定兴趣度为RUI=0。因此,兴趣的取值范围为[0,1]。
采样之后原有的数据集得到扩充,得到一个新的user-item集K={(U,I)},其中如果(U,I)是正样本,则RUI=1,否则RUI=0。损失函数如下所示:
在这里插入图片描述

为了最小化上面的损失函数,我们采取随机梯度下降算法,它首先通过求参数的偏导数找到最速下降方向,然后通过迭代法不断地优化参数

  • 通过求参数Pu,k的偏导确定最快的下降方向
    -在这里插入图片描述
  • 迭代计算不断优化参数(迭代次数事先人为设置),直到参数收敛
    在这里插入图片描述
    在这里插入图片描述
    当估算出P和Q矩阵后,我们就可以使用最开始的公式计算用户U对各个item的兴趣度值,并将兴趣度值最高的N个item(根据业务来)推荐给用户。
    在这里插入图片描述

LFM中,重要的参数有4个:(代码实例中可以体现)

  1. 隐特征的个数F
  2. 学习速率alpha
  3. 正则化参数lambda
  4. 负样本/正样本比例ratio
    其中,ratio参数对LFM的性能影响最大

代码实例

1. 引入依赖

import numpy as np
import pandas as pd

2. 数据准备

# 评分矩阵R
R = np.array([[4,0,2,0,1],
             [0,2,3,0,0],
             [1,0,2,4,0],
             [5,0,0,3,1],
             [0,0,1,5,1],
             [0,3,2,4,1],])
len(R[0])

**输出效果:5

3. 算法实现

"""
@输入参数:
R:M*N 的评分矩阵
K:隐特征向量维度
max_iter: 最大迭代次数
alpha:步长
lamda:正则化系数

@输出:
分解之后的 P,Q
P:初始化用户特征矩阵M*K
Q:初始化物品特征矩阵N*K
"""

# 给定超参数

K = 5
max_iter = 5000
alpha = 0.0002
lamda = 0.004

# 核心算法
def LFM_grad_desc( R, K=2, max_iter=1000, alpha=0.0001, lamda=0.002 ):
    # 基本维度参数定义
    M = len(R)
    N = len(R[0])
    
    # P,Q初始值,随机生成
    P = np.random.rand(M, K)
    Q = np.random.rand(N, K)
    Q = Q.T
    
    # 开始迭代
    for step in range(max_iter):
        # 对所有的用户u、物品i做遍历,对应的特征向量Pu、Qi梯度下降
        for u in range(M):
            for i in range(N):
                # 对于每一个大于0的评分,求出预测评分误差
                if R[u][i] > 0:
                    eui = np.dot( P[u,:], Q[:,i] ) - R[u][i]
                    
                    # 代入公式,按照梯度下降算法更新当前的Pu、Qi
                    for k in range(K):
                        P[u][k] = P[u][k] - alpha * ( 2 * eui * Q[k][i] + 2 * lamda * P[u][k] )
                        Q[k][i] = Q[k][i] - alpha * ( 2 * eui * P[u][k] + 2 * lamda * Q[k][i] )
        
        # u、i遍历完成,所有特征向量更新完成,可以得到P、Q,可以计算预测评分矩阵
        predR = np.dot( P, Q )
        
        # 计算当前损失函数
        cost = 0
        for u in range(M):
            for i in range(N):
                if R[u][i] > 0:
                    cost += ( np.dot( P[u,:], Q[:,i] ) - R[u][i] ) ** 2
                    # 加上正则化项
                    for k in range(K):
                        cost += lamda * ( P[u][k] ** 2 + Q[k][i] ** 2 )
        if cost < 0.0001:
            break
        
    return P, Q.T, cost


4. 测试

P, Q, cost = LFM_grad_desc(R, K, max_iter, alpha, lamda)

print(P)
print(Q)
print(cost)

predR = P.dot(Q.T)

print(R)
predR

输出效果
P:
[[ 0.3830611 0.82850065 0.82023839 0.52119365 1.07831816]
[ 0.30047264 1.61805241 0.44803691 0.18957273 0.69562221]
[ 0.5089245 1.15974588 0.28690078 1.15027101 -0.37415904]
[ 0.32906774 0.80254889 0.99686519 0.22888021 1.54492518]
[ 1.33431509 0.33140111 0.74692304 1.149386 0.48054638]
[ 0.56541894 0.7369649 1.00561082 0.74870477 1.12564774]]
Q:
[[ 0.4798044 0.92225918 1.07482479 0.10285196 1.94418819]
[ 0.20864097 0.47978933 1.07255543 0.48634109 0.91665161]
[-0.15978907 1.57366588 0.46409477 0.18390879 0.29599675]
[ 1.49743967 1.06857301 0.64402246 1.7015778 0.39911779]
[ 0.32778316 0.45598072 -0.24798659 0.34891638 0.44123607]]
cost:
0.5421902087209758
R:
[[4 0 2 0 1]
[0 2 3 0 0]
[1 0 2 4 0]
[5 0 0 3 1]
[0 0 1 5 1]
[0 3 2 4 1]]
predR:
array([[3.97955851, 2.59909912, 2.03827334, 3.30440379, 0.95757906],
[3.48991137, 2.04939982, 2.94695921, 3.06770057, 1.09826208],
[1.01301061, 1.18678376, 1.97767619, 3.99406951, 0.86074703],
[4.99666771, 3.05037658, 2.17238821, 2.99840935, 0.98813726],
[2.80114856, 2.23799913, 1.00857109, 4.98078217, 1.01632564],
[4.29729537, 2.9460835 , 2.00696893, 4.00506296, 1.02991035]])

###算法存在的缺点

  1. 数据稀疏会导致性能降低
  2. 不能在线实时推荐。因为LFM在生成推荐列表时速度太慢。
  3. 不能给出推荐解释。因为LFM计算的是各个隐类,但每个类别不会自动生成这个类的类别标签。

至此,隐语义模型LFM介绍完了

机器学习未完待续 ……欢迎关注

微信公众号:大数据左右手
人要去的地方,除了远方,还有未来
欢迎关注我,一起学习,一起进步!
关注我,在公众号回复 “机器学习” 可领取电子书
在这里插入图片描述

常见的推荐算法原理介绍 常见的推荐算法原理介绍,随着互联网的发展短视频运营越来越精准化,我们身边常见的抖音、火山小视频等软件让你刷的停不下来,这些软件会根据你的浏览行为推荐你感兴趣的相关内容,这就用到了很多推荐算法在里面。 在淘宝购物,在头条阅读新闻,在抖音刷短视频,背后其实都有智能推荐算法。这些算法不断分析、计算我们的购物偏好、浏览习惯,然后为我们推荐可能喜欢的商品、文章、视频。这些产品的推荐算法如此智能、高效,以至于我们常常一打开淘宝就买个不停一打开抖音就停不下来。 大数据平台只是提供了数据获取、存储、计算、应用的技术 阅读详情

相关推荐

隐语义模型(LFM)

该算法最早在文本领域被提出,用于找到文本的隐含语义。核心思想是通过隐含特征(latent  factor)联系用户兴趣和物品(item)。是基于机器学习的方法。找出潜在的主题和分类。基于用户的行为对item进行自动聚类,划分到不同类别/主题,即用户的兴趣。 算法实例:假设用户A喜欢的音乐是小清新、吉他伴奏的(即所谓的latent  factor),则若一个歌曲(item)含这两个标签就推荐给用户

Anomynous的博客 1万+

H.266/VVC代码学习:MIP技术相关代码之predIntraMip函数

predIntraMip函数是进行MIP预测的入口函数,主要功能是进行矩阵乘法运算,再通过上采样获得整个块的预测像素,代码结果如下图所示: 块尺寸 矩阵乘法输出边界长度 m_reducedPredSize MIP矩阵维度 mipSizeId = 0 4x4 4 16x4 mipSizeId = 1 4xN、Nx4、8x8 4 16x8 mipSizeId = 2 其余块 8 64x8 ..

BigDream123的博客 4365

抖音算法揭秘,百万粉丝的背后逻辑

抖音算法揭秘,百万粉丝的背后逻辑 抖音如何让上热门? 百度有百度的算法、微信有微信的算法、头条也头条的算法,算法是任何平台必不可少的机制,今天就来分享一下抖音的算法机制。 一、科普 算法是什么? 简单通俗的讲,算法就是一套评判机制。这套机制对平台的所有用户都有效,无论是内容生产者(拍视频的人)或内容消费者(看视频的人),很多时候我们既是生产者也是消费者。我们在平台上的每一个动作都像是一个清晰的指令,平台根据这些指令来判断我们的性质。并将我们分为优质用户、沉默用户、流失用户、可挽回用户户等;除此之外,它

Mage25的博客 2509

Java多线程系列--“JUC锁”04之 公平锁(二) (r)

概要 前面一章,我们学习了“公平锁”获取锁的详细流程;这里,我们再来看看“公平锁”释放锁的过程。内容包括: 参考代码 释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系列--“JUC锁”03之 公平锁(一)”,锁的使用示例请参考“Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock”。 注意: (01) 这里是以

XINJing的专栏 8772

〖TensorFlow2.0笔记23〗(更新版)ResNet-18实现Cifar10(94%)和Cifar100(75%)分类

ResNet-18实现CIFAR-10(94%)和CIFAR-100(75%)分类!

AI新视界 7454

美国NDC PrediktIR水分仪安装指导北京宇宏泰 .pdf

美国NDC,红外水分仪,红外测水,进口水分仪,北京宇宏泰,烧结球团测水,烧结自动加水,自动打水,炼钢炼铁,CM710e,MM710,TM710,TM710e,eries 9,PrediktIR

用Prophet在Python中进行时间序列预测

使用fbprophet分析世界疫情感染人数 import pandas as pd from fbprophet import Prophet pred = pd.read_csv("../kaggle3/covid-19-all.csv") pred.head() Country/Region Province/State ...

qq_41081716的博客 2582

银河麒麟V10系统grub崩溃急救指南:从光盘救援到完整恢复(附常见错误排查)

本文详细介绍了银河麒麟V10系统grub崩溃的急救方法,从使用安装光盘进入救援环境到完整恢复系统的全流程。针对不同损坏程度(轻度、中度、严重)提供了分级恢复策略,包括grub2-install和grub2-mkconfig等关键命令的使用,并附有常见错误排查表,帮助用户快速解决引导问题。

weixin_30955617的博客 483

购物网站的推荐算法-个性化推荐算法中如何处理买了还推

1. 引言 目前在工业界推荐中广泛使用的协同过滤算法(Collaborative Filtering)主要分为user-based和item-based两种类型,user-based多用于挖掘那些有共同兴趣的小团体;而item-based侧重于挖掘item之间的关系,然后根据用户的历史行为来为用户生成推荐列表。相比item-based,user-based方法推荐的新颖性好一些,但是准确性差

zhangcanyan的博客 1万+

从零到一:FAST_LIO与FAST_LIO2算法环境搭建与实战评测

本文详细介绍了FAST_LIO与FAST_LIO2算法的环境搭建与实战评测,包括算法原理、环境配置避坑指南、源码编译技巧及性能对比。FAST_LIO2凭借ikd-tree数据结构在动态环境中表现优异,处理速度提升至15ms,内存占用降低40%。文章还提供了常见问题排查和进阶优化技巧,助力开发者高效实现SLAM应用。

weixin_29271053的博客 470

基于RK3562J开发板的MCP2518FD CAN-FD控制器驱动适配与测试指南

本文详细介绍了在RK3562J开发板上适配MCP2518FD CAN-FD控制器驱动的完整流程。内容涵盖内核驱动配置、设备树修改、编译烧录以及实际通信测试,重点分享了调试方法,旨在帮助开发者快速为嵌入式系统扩展高速CAN-FD通信能力,适用于汽车电子、工业控制等场景。

jenkins8butler的博客 496

金融风控-贷款违约预测学习笔记(Part3:特征工程)

金融风控-贷款违约预测学习笔记(Part3:特征工程)特征预处理处理类别型特征和数值型特征缺失值填充时间格式处理对象类型特征转换到数值类别特征处理异常值处理异常检测方法一:均方差异常检测方法二:箱型图数据分桶特征分箱的目的:数据分桶的对象:分箱的原因:分箱的优点:分箱的基本原则:分箱算法:分箱结果的评价特征交互特征编码在树模型中使用labelEncode逻辑回归模型需要另外处理的特征工程特征选择Filter参数 threshold为方差的阈值Wrapper(Recursive feature elimina

不想做数分的码农不是好运营 1012

地平线旭日X3 安装xfce桌面+VNC查看USB摄像头

VNC是Virtual Network Computing的缩写,它是一种使用RFB(Remote Frame Buffer)协议的用于控制远程电脑的图形桌面分享系统。xfce桌面相比于GNOME桌面更加轻量,占用的资源更少,在没有GPU的设备上也可以运行(旭日的Desktop版本从外观上好像就是xfce桌面,具体没有尝试)。可以使用专用的VNC客户端连接到开发板,例如vnc viewer。板子默认带有openssh-server,因此,WiFi热点连接成功后,就可以使用ssh登录开发板了。

bingdund的博客 509

机器学习02-(损失函数loss、梯度下降、线性回归、评估训练、模型加载、岭回归、多项式回归)

机器学习-02回归模型线性回归评估训练结果误差(metrics)模型的保存和加载岭回归多项式回归决策树基本算法原理 回归模型 线性回归 输入 输出 0.5 5.0 0.6 5.5 0.8 6.0 1.1 6.8 1.4 7.0 ... y = f(x) 预测函数:y = w0+w1x x: 输入 y: 输出 w0和w1: 模型参数 所谓模型训练,就是根据已知的x和y,找到最佳的模型参数w0 和 w1,尽可能精确地描述出输入和输出的关系。 5.0 = w0

yegeli的博客 3427

verilog实现步进电机脉冲分配器(三相六拍)基于Nexys4DDR开发板

使用Verilog HDL设计的一个能够自启动、具有正反转功能的三相六拍步进电机脉冲分配器。已经写好Nexy4DDR的管脚约束文件 可以通过Nexys4DDR开发板的PMOD接口连接步进电机进行调试。 使用verilog语言 在vivado2018.2下运行编译下载都正确,(也可在ISE,QuartusII下使用)下面是工程截图: ...

QQ_778132974的博客 2593

[QMT量化交易小白入门]-四、如何筛选优质可转债,并进行下单操作

通过上述步骤,成功地使用Python代码完成了可转债的筛选、数据处理和下单操作。当然,这只是一个基础的示例,实际投资中还需要考虑更多因素,如市场环境、资金管理、风险控制等。希望本文能为各位投资者提供一些有价值的参考,助力大家在投资道路上走得更远。

木头大左的博客 1733

各大牛逼网站推荐系统

1. 前言 随着互联网技术和社会化网络的发展,每天有大量包括博客,图片,视频,微博等等的信息发布到网上。传统的搜索技术已经不能满足用户对信息发现的需求,原因有多种,可能是用户很难用合适的关键词来描述自己的需求,也可能用户需要更加符合他们兴趣和喜好的结果,又或是用户无法对自己未知而又可能感兴趣的信息做出描述。推荐引擎的出现,可以帮用户获取更丰富,更符合个人口味和更加有意义的信息。 个

pqhdp的专栏 1万+

Android 13.0 framework默认沉浸式导航栏功能实现

​ 在13.0的系统rom定制化开发中,在实现导航栏的某些定制化开发中,在某些产品需要实现沉浸式导航栏,就是需要app 能全屏显示同样也能显示导航栏,接下来就来分析下相关的功能实现 ​

安卓兼职framework和app工程师的博客 468

hopfield 神经网络 手写数字 代码_[Kaggle] Digit Recognizer 手写数字识别(神经网络)...

目录1. baseline2. 改进2.1 增加训练时间2.2 更改网络结构Digit Recognizer 练习地址相关博文:[Hands On ML] 3. 分类(MNIST手写数字预测)[Kaggle] Digit Recognizer 手写数字识别1. baseline导入包importtensorflowastffromtensorflowimportkeras#...

weixin_29343153的博客 1409

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

树莓派开发和车牌识别

目录 如何判断树莓派型号 车牌识别 HyperLPR CPP 依赖 Linux/Mac 编译 CPP demo 还是试一试python版把 demo.py的逻辑关系 模型资源说明 实现对摄像头进行拍照 在树莓派上安装环境 ssh pip install tensorflow errer: FFFFFFFFFFFFFFFFFFFinally 如何判断树莓派型号 ...

Asber的博客 7738

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

爬取淘宝商品数据使用Java实现商品推荐系统(含sql文件、算法推导等)

爬取淘宝商品数据使用Java实现商品推荐系统(含sql文件等)

TrueDei 7456

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

抖音推荐算法总结

抖音推荐算法究竟如何是做抖音短视频运营的同学非常关心的问题,抖音官方并没有披露正式的算法,但凭借着民间的智慧和官方披露的部分信息中,网友已经总结出抖音推荐算法的秘密。这里整理资料如下: 1. 发布后的推荐流程 第0步:双重审核 在抖音,每天有数量庞大的新作品上传,纯靠机器审核容易被钻空子,纯靠人工审核又不太现实。因此,双重审核成为抖音算法筛选视频内容的第一道门槛。 机器审核(检测是否违...

给我一点温度 3万+

推荐系统之隐语义模型(LFM)及Python实现

核心思想 隐语义模型LFM和LSI,LDA,Topic Model其实都属于隐含语义分析技术,是一类概念,他们在本质上是相通的,都是找出潜在的主题或分类。这些技术一开始都是在文本挖掘领域中提出来的,近些年它们也被不断应用到其他领域中,并得到了不错的应用效果。比如,在推荐系统中它能够基于用户的行为对item进行自动聚类,也就是把item划分到不同类别/主题,这些主题/类别可以理解为用户的兴趣。 对于...

十三 7672

Python机器学习项目:基于数据挖掘的抖音商用广告视频识别

Python机器学习项目:基于数据挖掘的抖音商用广告视频识别。 我们将使用人工智能的方法构建一套商用广告识别系统来预测抖音短视频是否为商用广告,通过对Tik Tok平台上视频的时长、声音频谱、视频光谱、文字分布、画面变化等特征,进行特征抽取、特征过滤等方式处理后进行建模,来快速区分出投稿视频中的商业广告。

Zhuoning Guo's Blog 7287

python图片内容识别_TensorFlow从1到2(五)图片内容识别和自然语言语义识别

Keras内置的预定义模型上一节我们讲过了完整的保存模型及其训练完成的参数。Keras中使用这种方式,预置了多个著名的成熟神经网络模型。当然,这实际是Keras的功劳,并不适合算在TensorFlow 2.0头上。当前TensorFlow 2.0-alpha版本捆绑的Keras中包含:densenetinception_resnet_v2inception_v3mobilenetmobilenet...

weixin_29143339的博客 1105
上一篇: 论文查重怎么搞的?一篇文章的简介怎么出来的呢?关键词提取怎么提取的呢?TF-IDF算法可以了解下
下一篇: 你知道搜索是怎样的一个原理吗?对话形式通俗易懂
大数据左右手
博客等级 码龄9年 475粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值