基于相关型深度学习的自助机器学习

  • 电脑网络维修
  • 2024-11-14

基于相关型深度学习的自助机器学习

译文 精选 作者: 朱先忠 在本文中,咱们将深化讨论一种幽默的深度学习(DL)新方法,称为相关型深度学习(RDL)。咱们还将经过在一家电子商务公司的实在数据库(不是数据集!)上做一些RDL来取得一些通常阅历。

本文将讨论间接在相关数据库上口头机器学习的新方法——相关型深度学习。

本文示例名目数据集的相关形式(作者提供图片)

在本文中,咱们将深化讨论一种幽默的深度学习(DL)新方法,称为相关型深度学习(RDL)。咱们还将经过在一家电子商务公司的实在数据库(不是数据集!)上做一些RDL来取得一些通常阅历。

简介

无理想环球中,咱们通常有一个相关数据库,咱们想在这个数据库上运转一些机器学习义务。然而,有时刻数据库须要高度规范化;这象征着,少量耗时的特色工程和粒度损失,由于咱们必定启动少量的聚合操作。更关键的是,咱们可以构建有数种或者的特色组合,每种组合都或者发生良好的功能(【文献2】)。这象征着,咱们或者会在数据库表格中留下一些与ML义务相关的消息。

这相似于计算机视觉的早期,在深度神经网络出现之前,特色工程义务是基于像素值方式手工成功的。如今,模型间接经常使用原始像素,而不再依赖于这个两边环节。

相关型深度学习

相关型深度学习(RDL)承诺用表格方式学习成功雷同的事件。也就是说,它消弭了经过间接在相关数据库上学习来构建特色矩阵的额外步骤。RDL经过将数据库及其相关转换为图来成功这一点;其中,表中的一行成为节点,表之间的相关成为边,行值作为节点特色存储在节点内。

Kaggle的电子商务数据集 ,该数据集蕴含无关星形形式中电子商务平台的买卖数据,其中蕴含一个外围理想表(买卖)和一些维度表。完整的代码可以在 链接 处的笔记本文件中找到。

库来口头RDL。在relbench中,咱们必定做的第一件事是指定相关数据库的形式。上方给出一个示例,说明咱们如何对数据库中的“事务”表口头此操作。咱们将表作为pandas数据帧给出,并指定主键和期间戳列。主键列用于惟一标识实体。期间戳确保咱们只能在预测未来买卖时从过去的买卖中学习。在这种构图中,这象征着消息只能从期间戳较低的节点(即过去)流向期间戳较高的节点。此外,咱们指定相关中存在的外键。在这种状况下,事务表具备列“customer_key”,该列是指向“customer_dim”表的外键。

tables['transactions'] = Table(df=pd.DataFrame(t),pkey_col='t_id',fkey_col_to_pkey_table={'customer_key': 'customers','item_key': 'products','store_key': 'stores'},time_col='date')
class EcommerceDataBase(Dataset):#创立你自己的数据集的示例:= pd.Timestamp(year=2018, month=1, day=1)test_timestamp = pd.Timestamp(year=2020, month=1, day=1)def make_db(self) ->).drop(columns=['payment_key', 'time_key', 'unit'])t['date'] = pd.to_datetime(t.date)t = t.reset_index().rename(columns={'index': 't_id'})t['quantity'] = t.quantity.astype(int)t['unit_price'] = t.unit_price.astype(float)products['unit_price'] = products.unit_price.astype(float)t['total_price'] = t.total_price.astype(float)print(t.isna().sum(axis=0))print(products.isna().sum(axis=0))print(stores.isna().sum(axis=0))print(customers.isna().sum(axis=0))tables['products'] = Table(df=pd.DataFrame(products),pkey_col='item_key',fkey_col_to_pkey_table={},time_col=None)tables['customers'] = Table(df=pd.DataFrame(customers),pkey_col='customer_key',fkey_col_to_pkey_table={},time_col=None)tables['transactions'] = Table(df=pd.DataFrame(t),pkey_col='t_id',fkey_col_to_pkey_table={'customer_key': 'customers','item_key': 'products','store_key': 'stores'},time_col='date')tables['stores'] = Table(df=pd.DataFrame(stores),pkey_col='store_key',fkey_col_to_pkey_table={})return>

至关关键的是,作者引入了训练表的概念。这个训练表基本上定义了ML义务。这里的想法是,咱们想预测数据库中某个实体的未来形态(即未来值)。咱们经过指定一个表来成功这一点,其中每一行都有一个期间戳、实体的标识符和咱们想要预测的一些值。id用于指定实体,期间戳指定咱们须要预测实体的期间点。这也将限度可用于推断此实体值的数据(即仅过去的数据)。值自身就是咱们想要预测的(即实在数据值)。

就咱们而言,咱们有一个与客户互动的在线平台。咱们宿愿预测客户在未来30天内的支出。咱们可以经常使用DuckDB口头的SQL语句创立训练表。这是RDL的一大长处,由于咱们可以仅经常使用SQL创立任何类型的ML义务。例如,咱们可以定义一个查问来选用未来30天内买家的购置数量,以启动散失预测。

df = duckdb.sql(f"""selecttimestamp,customer_key,sum(total_price) as revenuefromtimestamp_df tleft jointransactions taonta.date <= t.timestamp + INTERVAL '{self.timedelta}'and ta.date > t.timestampgroup by timestamp, customer_key""").df().dropna()

结果将是一个数据库表格,其中seller_id是咱们想要预测的实体的关键字,支出是指标,期间戳是咱们须要启动预测的期间(即咱们只能经常使用到目前为止的数据启动预测)。

上方是创立“customer_venue”义务的完整代码。

class CustomerRevenueTask(EntityTask):# 自定义义务示例:= TaskType.REGRESSIONentity_col = "customer_key"entity_table = "customers"time_col = "timestamp"target_col = "revenue"timedelta = pd.Timedelta(days=30) # 咱们想要预测未来的支出。metrics = [r2, mae]num_eval_timestamps = 40def make_table(self, db:>

至此,咱们曾经成功了大局部上班。其他的上班流程都是相似的,独立于机器学习义务。我能够从relbench提供的 示例笔记本文件

例如,咱们须要对节点特色启动编码。在这里,咱们可以经常使用GloVe嵌入(【译者注】一般网文中翻译为“手套嵌入”)来编码一切文本特色,如产品形容和产品称号。

from typing import List, Optionalfrom sentence_transformers import SentenceTransformerfrom torch import Tensorclass GloveTextEmbedding:def __init__(self, device: Optional[torch.device] = None):self.model = SentenceTransformer("sentence-transformers/average_word_embeddings_glove.6B.300d",device=device,)def __call__(self, sentences: List[str]) -> Tensor:return torch.from_numpy(self.model.encode(sentences))

之后,咱们可以将这些转换运行于咱们的数据并构建图表。

from torch_frame.config.text_embedder import TextEmbedderConfigfrom relbench.modeling.graph import make_pkey_fkey_graphtext_embedder_cfg = TextEmbedderConfig(text_embedder=GloveTextEmbedding(device=device), batch_size=256)data, col_stats_dict = make_pkey_fkey_graph(db,col_to_stype_dict=col_to_stype_dict,# speficied column typestext_embedder_cfg=text_embedder_cfg,# our chosen text encodercache_dir=os.path.join(root_dir, f"rel-ecomm_materialized_cache"),# store materialized graph for convenience)

其他的代码将从规范层构建GNN(图神经网络),对循环训练启动编码,并启动一些评价。为了便捷起见,我将把这段代码从本文中删除,由于它十分规范,在各个义务中都是一样的。你可以在链接处检查对应的笔记本文件。

训练结果(作者提供图片)

因此,咱们可以训练这个GNN,使其r2到达0.3左右,MAE到达500。这象征着,它预测卖家在未来30天的支出,平均误差为+-500美元。当然,咱们不知道这是好是坏,兴许经过经典机器学习和特色工程的联合,咱们可以获取80%的r2。

论断

相关型深度学习是一种幽默的机器学习新方法,特意是当咱们有一个复杂的相关形式时,手动特色工程太费劲了。它使咱们能够仅经常使用SQL定义ML义务,这关于那些不深化钻研数据迷信但仅了解一些SQL的人来说尤其有用。这也象征着,咱们可以极速迭代,并对不同的义务启动少量试验。

同时,这种方法也存在自己的疑问,例如训练GNN和从相关形式构建图存在不少艰巨。此外,还有一个疑问是,RDL在功能方面能在多大水平上与经典ML模型竞争。过去,咱们曾经看到,在表格预测疑问上,XGboost等模型已被证实比神经网络更好。

参考文献

【1】Robinson,Joshua等人,《RelBench:相关数据库深度学习的基准》,arXiv,2024,。

【2】Fey、Matthias等人,《相关深度学习:相关数据库上的图示意学习》,arXiv预印本arXiv:2312.04615(2023)。

【3】Schlichtkrull,Michael等人。《用图卷积网络建模相关数据》,语义网:第15届国内会议,2018年ESWC,希腊克里特岛伊拉克利翁,2018年6月3日至7日,会议记载#15。施普林格国内出版社,2018年。

译者引见

朱先忠,社区编辑,专家博客、讲师,潍坊一所高校计算机老师,自在编程界老兵一枚。

Self-Service ML with Relational Deep Learning

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/4086.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号