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模型进行分类回归任务

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


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

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