【推荐系统】TensorFlow实现FM特征分解机

简介: TensorFlow实现FM特征分解机

导库


from tensorflow.keras import *

from tensorflow.keras.layers import *

from tensorflow.keras.models import *

from tensorflow.keras.callbacks import *

import tensorflow.keras.backend as K


from sklearn.model_selection import train_test_split

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import LabelEncoder

from sklearn.datasets import load_breast_cancer


from tqdm import tqdm


import pandas as pd

import numpy as np


FM特征组合层


# FM 特征组合层

class crossLayer(layers.Layer):

   def __init__(self, input_dim, output_dim=10, **kwargs):

       super(crossLayer, self).__init__(**kwargs)


       self.input_dim = input_dim

       self.output_dim = output_dim


       self.kernel = self.add_weight(name='kernel',

                                     shape=(self.input_dim, self.output_dim),

                                     initializer='glorot_uniform',

                                     trainable=True)


   def call(self, x):

       a = K.pow(K.dot(x, self.kernel), 2)

       b = K.dot(K.pow(x, 2), K.pow(self.kernel, 2))

       return 0.5 * K.mean(a - b, 1, keepdims=True)


定义FM模型


# 定义FM模型

def FM(feature_dim):

   inputs = Input(shape=(feature_dim,))


   # 一阶特征

   linear = Dense(units=1,

                  kernel_regularizer=regularizers.l2(0.01),

                  bias_regularizer=regularizers.l2(0.01))(inputs)


   # 二阶特征

   cross = crossLayer(feature_dim)(inputs)

   add = Add()([linear, cross])


   pred = Dense(units=1, activation="sigmoid")(add)

   model = Model(inputs=inputs, outputs=pred)


   model.summary()

   model.compile(loss='binary_crossentropy',

                 optimizer=optimizers.Adam(),

                 metrics=['binary_accuracy'])


   return model


读取数据


# 读取数据

print('loading data...')

X, y = load_breast_cancer(return_X_y = True)


划分数据集


# 划分数据集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2021)


构建模型


# 构建模型

model = FM(X.shape[1])


训练模型


# 训练模型

model.fit(X_train, y_train, epochs=10, batch_size=128, validation_data=(X_test, y_test))

目录
相关文章
|
1天前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
206 0
|
搜索推荐 算法 数据挖掘
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
|
1天前
|
分布式计算 搜索推荐 算法
推荐系统的数学模型-从矩阵分解到推荐系统(Scala实现)
推荐系统的数学模型-从矩阵分解到推荐系统(Scala实现)
38 0
|
1天前
|
搜索推荐 算法 前端开发
基于用户特征的个性化网络小说推荐系统的设计与实现
基于用户特征的个性化网络小说推荐系统的设计与实现
|
1天前
|
存储 监控 NoSQL
解密推荐系统:用Redis解决特征存储问题
解密推荐系统:用Redis解决特征存储问题
|
机器学习/深度学习 搜索推荐 算法
构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)
毋庸讳言,和传统架构(BS开发/CS开发)相比,人工智能技术确实有一定的基础门槛,它注定不是大众化,普适化的东西。但也不能否认,人工智能技术也具备像传统架构一样“套路化”的流程,也就是说,我们大可不必自己手动构建基于神经网络的机器学习系统,直接使用深度学习框架反而更加简单,深度学习可以帮助我们自动地从原始数据中提取特征,不需要手动选择和提取特征。
构建基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统(Python3.10/Tensorflow2.11)
|
机器学习/深度学习 搜索推荐 算法
# 【推荐系统入门到项目实战】(五):SVD矩阵分解 -
# 【推荐系统入门到项目实战】(五):SVD矩阵分解
# 【推荐系统入门到项目实战】(五):SVD矩阵分解 -
|
机器学习/深度学习 搜索推荐 TensorFlow
【推荐系统】TensorFlow复现论文Wide&Deep网络结构
【推荐系统】TensorFlow复现论文Wide&Deep网络结构
123 0
【推荐系统】TensorFlow复现论文Wide&Deep网络结构
|
搜索推荐 TensorFlow 数据处理
【推荐系统】TensorFlow复现论文PNN网络结构
【推荐系统】TensorFlow复现论文PNN网络结构
88 0
【推荐系统】TensorFlow复现论文PNN网络结构
|
搜索推荐 TensorFlow 算法框架/工具
【推荐系统】TensorFlow复现论文NeuralCF网络结构
【推荐系统】TensorFlow复现论文NeuralCF网络结构
134 0
【推荐系统】TensorFlow复现论文NeuralCF网络结构