PyTorch中Einsum学习
einsum,这是我开发深度学习模型时最喜欢的函数。这篇文章将从PyTorch角度出发,如何使用torch.einsum进行相关的矩阵计算操作。
einsum符号
如果你很难记住PyTorch\TensorFlow中所有中用于计算点积、外积、转置和矩阵向量或矩阵矩阵乘法的不同函数的名称或者使用方式。那么你就急需要einsum,einsum表示法是以一种优雅的方式来表达所有这些矩阵、向量或者张量的复杂计算操作。基本上使用的是一种特定于域的语言。这样做的好处不仅仅是不需要记忆或定期查找特定的库或者函数。一旦您理解并使用einsum,您将能够更快地编写更简洁、更高效的代码。目前主流深度学习框架中都包含了einsum的实现,比如PyTorch中的torch.einsum和TensorFlow中的tf.einsum。
假设我们要计算两个矩阵A∈RI×K{\color{red}\mathbf{A}} \in \mathbb{R}^{I \times K}A∈RI×K和B∈RK×J{\color{blue}\mathbf{B}}\in\mathbb{R}^{K \times J}B∈RK×J的相乘 ...
用Keras实现libFM
主要来自于kaggle比赛 Talking Data competition on Kaggle,构建一个模型来预测用户在移动端点击广告之后是否会下载应用app,主要数据字段如下:
ip: 点击广告行为的ip地址
app: app id
device: 用户手机的设备类型,比如(iPhone6 plus,iPhone7 等)
os: 用户手机的系统版本号
channel: 移动广告发布的channel id
click_time: 用户点击广告时间
attributed_time: 如果用户在点击广告之后下载了应用程序,则表示用户的下载时间
is_attributed: 预测变量,应用程序是否被下载
这份数据集中,ip,device和os组合一起基本上可以表示一名用户,但是某些情况下,存在一个ip地址被许多用户共享。在这次比赛中,这样的数据会增加问题的复杂性,为了简单化,忽略掉。另外channel数据似乎没啥作用,对其进行删除。赛方提供大约2亿条数据,目标是预测用户是否下载应用程序。
这让人想起推荐系统,它的目标是预测用户是否会购买产品(app就是这里的产品)。
推荐系统中最常用 ...
我们是如何构建定制化TensorFlow预测系统的?
近年来,移动端游戏随着智能手机技术的发展,越来越成为人们娱乐休闲的新模式。据 NewZoo 数据调查研究发现,全球手机端游戏已达到 21 亿玩家规模,呈 14% 同比年增长趋势,其中大部分玩家有在游戏中付费的经历。
对于 SLG 策略类型手机游戏,由于前期用户需要时间了解及熟练游戏操作,即使有付费倾向,一般也会比较滞后。这种滞后为游戏的内部运营,市场投放效果的衡量及优化带来了很大挑战。本文基于一款日活 600 万的明星 SLG 游戏,根据游戏内用户的 500+ 个特征行为,对未付费用户在下载安装后 28 天内是否会转化为付费用户加以预测。
文章尽量避免涉及过多的技术细节,主要从系统架构的角度加以阐述,如何自动化一套机器学习预测系统并与 Google UAC (通用应用广告平台) 相结合,最终提高 7 倍转化率,2.6 倍投资回报率,降低 63% 付费用户获取成本。
数据准备
数据包括两部分, 预测目标 Y 及用户参数 X,其中用户参数 X 又分为状态参数 Xs 和行为参数 Xb。
原始数据符合如下模板:
其中,每行数据为每一位用户每天的行为参数汇总和状态快照。如若用户当天未登录,则 ...
主流机器学习模型模板代码
常用的模型脚本
Preprocess
123456789101112131415# 通用的预处理框架import pandas as pdimport numpy as npimport scipy as sp# 文件读取def read_csv_file(f, logging=False): print("==========读取数据=========") data = pd.read_csv(f) if logging: print(data.head(5)) print(f, "包含以下列") print(data.columns.values) print(data.describe()) print(data.info()) return data
Logistic Regression
12345678910111213141516171819202122232425262728293031323334# 通用的LogisticRegre ...
知识图谱基础之RDF,RDFS与OWL
看过之前两篇文章(为什么需要知识图谱?什么是知识图谱?——KG的前世今生, 语义网络,语义网,链接数据和知识图谱的读者应该对RDF有了一个大致的认识和理解。本文将结合实例,对RDF和RDFS/OWL,这两种知识图谱基础技术作进一步的介绍。其实,RDF、RDFS/OWL是类语义网概念背后通用的基本技术,而知识图谱是其中最广为人知的概念。
一、知识图谱的基石:RDF
RDF表现形式
RDF(Resource Description Framework),即资源描述框架,其本质是一个数据模型(Data Model)。它提供了一个统一的标准,用于描述实体/资源。简单来说,就是表示事物的一种方法和手段。RDF形式上表示为SPO三元组,有时候也称为一条语句(statement),知识图谱中我们也称其为一条知识,如下图。
RDF由节点和边组成,节点表示实体/资源、属性,边则表示了实体和实体之间的关系以及实体和属性的关系。在第一篇文章中(为什么需要知识图谱?什么是知识图谱?——KG的前世今生,我们结合罗纳尔多的例子,介绍了RDF节点和边的类型约束,这里不再赘述。对RDF不熟悉的读者,可以参考第一篇 ...
语义网络,语义网,链接数据和知识图谱
前一篇文章“为什么需要知识图谱?什么是知识图谱?——KG的前世今生”提及了和知识图谱相关的一些早期概念。为了让读者能够更好地区分这些概念,以及更好地在整体上把握知识谱图发展过程,本文将对这些概念作一个更为详细的介绍。
一、语义网络(Semantic Network)
对于初学者来讲,这个概念很容易和语义网(Semantic Web)相混淆。为了行文一致,除非特别说明,语义网络指Semantic Network,语义网指Semantic Web。
语义网络是由Quillian于上世纪60年代提出的知识表达模式,其用相互连接的节点和边来表示知识。节点表示对象、概念,边表示节点之间的关系。
语义网络的优点:
容易理解和展示。
相关概念容易聚类。
语义网络的缺点:
1.节点和边的值没有标准,完全是由用户自己定义。
2.多源数据融合比较困难,因为没有标准。
3.无法区分概念节点和对象节点。
4.无法对节点和边的标签(label,我理解是schema层,后面会介绍)进行定义。
简而言之,语义网络可以比较容易地让我们理解语义和语义关系。其表达形式简单直白,符合自然。然而, ...
为什么需要知识图谱?什么是知识图谱?KG的前世今生
标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们会给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术细节,将其留到后续的文章进行介绍。
言归正传,本文主要分为三个部分。第一个部分介绍我们为什么需要知识图谱,第二个部分介绍知识图谱的相关概念及其形式化表示。最后,作一个简单的总结,并介绍该专栏后续文章会涉及的内容。
一. 看到的不仅仅是字符串
当你看见下面这一串文本你会联想到什么?
Ronaldo Luís Nazário de Lima
估计绝大多数中国人不明白上面的文本代表什么意思。没关系,我们看看它对应的中文:
罗纳尔多·路易斯·纳萨里奥·德·利马
这下大部分人都知道这是一个人的名字了,当然,不出什么意外,还是个外国人。但还是有一部分人不知道这个人具体是谁。下面是关于他的某张图片:
从这张图片我们又得到了额外信息,他是一 ...
深度学习与计算机视觉(PB-10)-Kaggle之猫狗比赛
在第9节中,我们提到了当数据太大无法加载到内存中时,如何使用HDF5保存大数据集——我们自定义了一个python脚本将原始图像数据集序列化为高效的HDF5数据集。在HDF5数据集中读取图像数据集可以避免I/O延迟问题,从而加快训练过程。
假设我们有N张保存在磁盘上的图像数据,之前的做法是定义了一个数据生成器,该生成器按顺序从磁盘中加载图像,N张图像共需要进行N个读取操作,每个图像一个读取操作,这样会存在I/O延迟问题。如果将图像数据集保存到HDF5数据集中,我们可以一次性读取batch大小的图像数据。这样极大地减少了I/O调用的次数,并且可以使用非常大的图像数据集。
在本节中,我们将学习如何为HDF5数据集定义一个图像生成器,从而方便使用Keras训练卷积神经网络。生成器会不断地从HDF5数据集中生成用于训练网络的数据和对应的标签,直到我们的模型达到足够低的损失/高精度才会停止。
在训练模型之前,我们将实现三种新的图像预处理方法——零均值化、patch Preprocessing和随机裁剪(也称为10-cropping或过采样)。之后,我们将利用Krizhevsky等人2012年的论 ...
数据挖掘模型中的IV和WOE详解
本文主要介绍下金融行业常用的数据分析的方法,比如IV,WOE,KS指标等。
IV的用途
IV的全称是Information Value,中文意思是信息价值,或者信息量。
我们在用逻辑回归、决策树等模型方法构建分类模型时,经常需要对自变量进行筛选。比如我们有200个候选自变量,通常情况下,不会直接把200个变量直接放到模型中去进行拟合训练,而是会用一些方法,从这200个自变量中挑选一些出来,放进模型,形成入模变量列表。那么我们怎么去挑选入模变量呢?
挑选入模变量过程是个比较复杂的过程,需要考虑的因素很多,比如:变量的预测能力,变量之间的相关性,变量的简单性(容易生成和使用),变量的强壮性(不容易被绕过),变量在业务上的可解释性(被挑战时可以解释的通)等等。但是,其中最主要和最直接的衡量标准是变量的预测能力。
“变量的预测能力”这个说法很笼统,很主观,非量化,在筛选变量的时候我们总不能说:“我觉得这个变量预测能力很强,所以他要进入模型”吧?我们需要一些具体的量化指标来衡量每自变量的预测能力,并根据这些量化指标的大小,来确定哪些变量进入模型。IV就是这样一种指标,他可以用来衡量自变量的预测 ...
Character Embeddings for deep learning
本文介绍字符嵌入,从字符的角度考虑embedding问题。
字符嵌入
机器学习需要输入数值数据,类似于文本数据需要转化为数值型,因此,词嵌入是常用的将文本数据转化为数值数据的方法,比如像word2vec算法,你可以获取一个单词的数值表示,并且可以使用这些数值向量得到句子/段落/文本等数值表示。
但是,训练一个数据集的词向量模型可能非常昂贵。解决这一问题的学术方法是使用预先训练的词向量模型进行单词嵌入,例如斯坦福大学的研究人员收集的Glove向量。然而,GLove向量非常大,;最大的一种(300维,约8400亿tokens)在磁盘上是5.65 GB,在不太强大的计算机上加载时可能会遇到内存不足问题。
为什么不使用字符嵌入呢?你可以计算相对较少的向量,而且可以将这些向量加载到内存中,并使用这些向量来衍生出单词向量,进而可以用来衍生出句子/段落/文档/等向量。但是,训练字符嵌入在计算上更加昂贵,因为字符的数量比tokens多5-6倍左右.
为什么不使用现有的预先训练的单词嵌入来推断单词中相应的字符嵌入?借鉴“bag-of-words“,思考“bag-of-characters”。例如,“ ...







