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

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

一、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)))

目录
相关文章
|
4月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
205 0
|
17天前
|
数据采集 机器学习/深度学习 搜索推荐
使用Python实现推荐系统模型
使用Python实现推荐系统模型
28 1
|
4月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统算法的研究与实践:协同过滤、基于内容的推荐和深度学习推荐模型
推荐系统算法的研究与实践:协同过滤、基于内容的推荐和深度学习推荐模型
263 1
|
2月前
|
算法 搜索推荐 Python
探索Python中的推荐系统:混合推荐模型
探索Python中的推荐系统:混合推荐模型
65 1
|
2月前
|
机器学习/深度学习 自然语言处理 搜索推荐
推荐系统的算法分类和操作流程介绍
推荐系统的算法分类和操作流程介绍
|
11月前
|
机器学习/深度学习 人工智能 移动开发
人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)
人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习应用篇-推荐系统[12]:经典模型-DeepFM模型、DSSM模型召回排序策略以及和其他模型对比
深度学习应用篇-推荐系统[12]:经典模型-DeepFM模型、DSSM模型召回排序策略以及和其他模型对比
深度学习应用篇-推荐系统[12]:经典模型-DeepFM模型、DSSM模型召回排序策略以及和其他模型对比
|
11月前
|
存储 搜索推荐 NoSQL
带你读《云存储应用白皮书》之37:3. 表格存储在推荐系统中的应用
带你读《云存储应用白皮书》之37:3. 表格存储在推荐系统中的应用
141 0
|
6月前
|
搜索推荐 算法 前端开发
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
160 0
|
4月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
114 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】