首页 > 其他分享 >【推荐系统】利用FM模型进行分类回归任务

【推荐系统】利用FM模型进行分类回归任务

时间:2023-01-26 18:31:16浏览次数:392  
标签:fit 模型 FM train test import data 回归


如果需要完整代码可以关注下方公众号,后台回复“代码”即可获取,阿光期待着您的光临~

【推荐系统】利用FM模型进行分类回归任务_数据

文章目录

  • ​​一、FM回归任务​​
  • ​​1. 导库​​
  • ​​2. 加载数据​​
  • ​​3. 获取数据​​
  • ​​4. 定义编码器​​
  • ​​5. 构建模型​​
  • ​​6. 衡量误差​​
  • ​​二、FM分类任务​​
  • ​​1. 导库​​
  • ​​2. 构造数据​​
  • ​​3. 划分数据集​​
  • ​​4. 定义编码器​​
  • ​​5. 构建模型​​
  • ​​6. 衡量误差​​

2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善推荐系统各个知识体系的文章,帮助大家更高效学习。

一、FM回归任务

1. 导库

import numpy as np
from sklearn.feature_extraction import DictVectorizer
from pyfm import pylibfm

DictVectorizer:它是可以将非结构化的数据转成array格式,这里将字典数据转成数组,一般情况下使用字典是因为在推荐系统中的矩阵一般是稀疏的,所以采用字典存储数据高效,可以不用存储大量无用的0

它转成数组的原理和OneHot差不多,对于数值型数据,它是保留原值,而对于非数值型则会将其利用OneHot进行编码,形成一个稀疏矩阵,每列表示同个特征不同值的选择门

2. 加载数据

"""加载数据"""
def loadData(filename, path="data/ml-100k/"):
data = []
y= []

users = set()
items = set()

with open(path + filename) as f:
for line in f:
(user, movie, rating, ts) = line.split('\t')
data.append({"user_id":str(user), "movie_id":str(movie)})
y.append(float(rating))
users.add(user)
items.add(movie)

return (data, np.array(y), users, items)

3. 获取数据

"""获取数据"""
(train_data, y_train, train_users, train_items) = loadData("ua.base")
(test_data, y_test, test_users, test_items) = loadData("ua.test")

4. 定义编码器

vec = DictVectorizer() # 将字典数据进行编码
X_train = vec.fit_transform(train_data)
X_test = vec.fit_transform(test_data)

5. 构建模型

fm = pylibfm.FM(num_factors = 10, # 交互特征维度
num_iter = 10, # 迭代次数
verbose = True, # 是否打印日志
task = "regression", # 模式
initial_learning_rate = 0.001, # 学习率
learning_rate_schedule = "optimal")
fm.fit(X_train, y_train)

6. 衡量误差

pred = fm.predict(X_test)
from sklearn.metrics import mean_squared_error
print("FM MSE: %.4f" % mean_squared_error(y_test, pred)) # 均方误差

二、FM分类任务

1. 导库

import numpy as np
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
from pyfm import pylibfm

2. 构造数据

"""加载数据"""
X, y = make_classification(n_samples=1000,n_features=100, n_clusters_per_class=1)

"""将数据转成字典类型"""
data = [ {v: k for k, v in dict(zip(i, range(len(i)))).items()} for i in X]

3. 划分数据集

"""划分数据集"""
X_train, X_test, y_train, y_test = train_test_split(data, y, test_size = 0.1, random_state = 2021)

4. 定义编码器

vec = DictVectorizer()
X_train = vec.fit_transform(X_train)
X_test = vec.fit_transform(X_test)

5. 构建模型

"""构建模型"""
fm = pylibfm.FM(num_factors = 2,
num_iter = 10,
verbose = True,
task = "classification",
initial_learning_rate = 0.0001,
learning_rate_schedule = "optimal")
fm.fit(X_train, y_train)

6. 衡量误差

"""衡量误差"""
from sklearn.metrics import log_loss
print("Validation log loss: %.4f" % log_loss(y_test,fm.predict(X_test)))


标签:fit,模型,FM,train,test,import,data,回归
From: https://blog.51cto.com/u_15834745/6023645

相关文章

  • 【Reactor模型】事件驱动模型 - Reactor模型简述
    模型演进抛出一个问题:线程怎样才能高效地处理多个连接的业务?当一个连接对应一个线程时,线程一般采用[read->业务处理->send]的处理流程,如果当前连接没有数据可读,那么线程......
  • 模型升级在Serverless架构下的实现与应用
    1模型升级迭代需求背景介绍众所周知,在人工智能领域,一些训练好的模型会随着时间推移不断优化,数据集也在不断迭代。例如某公司的人脸识别系统因为新员工的入职,老员工的离......
  • 经济思考:货币的水流模型
    经济思考:货币的水流模型    水流模型包含五个部分。水,灌溉的资源。水源,产生水的地方。水库,存储和分配水的地方。水渠,水流的通道;水渠连接田地。田地,从水渠获取......
  • 【Java】生产者消费者模型
    【Java】生产者消费者模型0x1前言生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间......
  • 【模型检测学习笔记】1、系统分析相关基本概念
    验证方法模拟:动态验证,常用,如今最主流的验证方法。仿真:类似模拟,但依赖于硬件。形式化验证:静态验证,用数学方法对模型的功能、功能、规范做检验。验证的完备性高,但实施困难。......
  • OSI七层模型介绍
      ......
  • 将keras的h5模型转化为onnx
    将keras的h5模型转化为onnx先安装pipinstallkeras2onnximportkerasimportkeras2onnximportonnxfromkeras.modelsimportload_modelmodel=load_model('/root/noteb......
  • onnx模型部署(一) ONNXRuntime
        通常我们在训练模型时可以使用很多不同的框架,比如有的同学喜欢用Pytorch,有的同学喜欢使用TensorFLow,也有的喜欢MXNet,以及深度学习最开始流行的Caffe等等,这样不......
  • Tekton的概念模型
    Tekton的主要功能是实现持续集成和交付部署。TektonPipeline是其核心组件,其他组件都是建立在TektonPipeline之上的。1Step、Task和PipelineStep(步骤)是CI/CD工作流中最......
  • 第一章 线性回归
    目录预测值\(h_{\theta}(x)\):\[\begin{align*}h_{\theta}(x)&=\theta_0\+\\theta_1x_1\+\\theta_2x_2+\dots\\&=\sum_{i=0}^{n}\theta_ix_i\\&=\thet......