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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【推荐算法系列一】FM因子分解机模型 -> 正文阅读

[人工智能]【推荐算法系列一】FM因子分解机模型


原论文地址: FM
参考代码: 推荐算法(一)——FM因式分解(原理+代码)

算法简述

相比于一般的线性模型,FM模型将交叉特征的影响考虑在内。
也适用于处理输入数据稀疏的情况。

数学公式

因子分解机模型

在这里插入图片描述

二项交互的推导,使复杂度降低到 线性

在这里插入图片描述

进一步转换为矩阵形式

y m × 1 = W 0 m × 1 + X m × n W 1 n × 1 + 1 2 ( ∑ ( ( X m × n V n × k ? X m × n 2 V n × k 2 ) m × k ) ) m × 1 y_{m\times 1} = W_{0_{m\times 1}} + X_{m\times n}W_{1_{n\times 1}} + \frac{1}{2}(\sum((X_{m\times n}V_{n\times k} -X_{m\times n}^2V^2_{n\times k} )_{m\times k}) )_{m\times 1} ym×1?=W0m×1??+Xm×n?W1n×1??+21?(((Xm×n?Vn×k??Xm×n2?Vn×k2?)m×k?))m×1?

输入数据稀疏适用

假设给定数据:
在这里插入图片描述
给定数据集如上图所示,表达的是用户对电影的评分,附加给了一些电影的信息,用户对其他电影的评分情况,以及用户的一些其他特征。每一行表示一个样本。

在FM模型的设定下,针对稀疏数据,也可以估计出特征的交互对预测目标的影响。
举个例子,假设我们想估计 Alice(A) 和 Star Trek 的交互关系对 评分y的贡献。
数据中,并没有 Alice 对 Star Trek 直接的评分数据, 交互关系是 0.
但是,借助于 FM, 我们可以估算出 < V A , V S T > <V_{A}, V_{ST}> <VA?,VST?>.

  • 由于对 SW 有相同的评分,Bob 和 Charlie 与 SW 的交互相似,也就是 < V B , V S W > <V_{B}, V_{SW}> <VB?,VSW?>, < V C , V S W > <V_{C}, V_{SW}> <VC?,VSW?>相近.
  • Alice 和 Charlie 对 Titanic 和 SW 的评分不同, V A V_{A} VA? V C V_{C} VC? 不同.
  • Bob 对 ST 和 SW 的评分接近,所以 V S W V_{SW} VSW? V S T V_{ST} VST? 相近.
  • 从而, < V A , V S T > <V_{A}, V_{ST}> <VA?,VST?> < V A , V S W > <V_{A}, V_{SW}> <VA?,VSW?> 相近.

代码实现

这里只给出 交互部分的实现供参考

from tensorflow import keras
from tensorflow.keras import layers
import tensorflow as tf
import os
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2"

class interaction_layer(layers.Layer):
    def __init__(self, k_units) -> None:
        super(interaction_layer,self).__init__()
        self.k_units = k_units
        
    
    def build(self, input_shape):
        self.V = self.add_weight(
            shape=(input_shape[-1], self.k_units), initializer="random_normal", trainable=True
        )


    def call(self, X):
        # 传入 X 后的计算
        # X 输入的形状是(m, n), self.V (n, k)
        x = 0.5 * tf.reduce_sum(tf.matmul(X, self.V) **2 -  tf.matmul( X**2,self.V **2), axis = 0)
        return x

所以 FM 中完全没有激活函数对吧,也就是没有加入任何非线性变换的。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:19:11  更:2022-05-05 11:20:01 
 
开发: 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/26 7:43:35-

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