一个函数搞定并行,为Pandas提速!为我Kaggle摘银

标星★公众号      爱你们

作者:Rahul Agarwal

编译:公众号海外部

近期原创文章:

♥  基于无监督学习的期权定价异常检测(代码+数据)

♥  5种机器学习算法在预测股价的应用(代码+数据)

♥  深入研读:利用Twitter情绪去预测股市

♥  Two Sigma用新闻来预测股价走势,带你吊打Kaggle

  利用深度学习最新前沿预测股价走势

♥  一位数据科学PhD眼中的算法交易

♥  基于RNN和LSTM的股市预测方法

♥  人工智能『AI』应用算法交易,7个必踩的坑!

♥  神经网络在算法交易上的应用系列(一)

♥  预测股市 | 如何避免p-Hacking,为什么你要看涨?

♥  如何鉴别那些用深度学习预测股价的花哨模型?

♥  优化强化学习Q-learning算法进行股市

我们有一张巨大的Pandas Dataframe,想要对其应用一个复杂的函数,这需要很多时间。

在本文章中,使用Kaggle上Quora虚假问题分类数据,我们需要创建一些数值特征,比如长度、标点的数量等。

https://www.kaggle.com/c/quora-insincere-questions-classification/overview

首先简单介绍一下:在这次比赛中,我们必须开发出能够识别和标记虚假问题的模型。 不仅是对性能的测试,而且是对高效代码编写技能的测试 。由于这是一场Kaggle内核比赛,外部数据选项有限,所以参赛者只能使用比赛组织者提供的词嵌入向量(WordEmbedding)。这意味着我们不能使用像BERT这样的先进模型。而且我们所有的模型都必须在2小时内完成运行。花费太多预处理时间会对整个比赛不利!

小知识: 词嵌入向量(WordEmbedding)是NLP里面一个重要的概念,我们可以利用WordEmbedding将一个单词转换成固定长度的向量表示,从而便于进行数学处理。

我们可以使用并行来提高代码的性能吗?

是的,我们可以!

只使用一个函数!

只使用一个函数并行化

首先,我要定义一个函数来创建我们的特征。 add_features 是我们希望应用于数据的函数。

我们可以使用下面的函数进行并行计算。

这段代码有什么作用? 它将Dataframe分解为n_core部分,并产生n_cores个进程,此进程将该函数应用于所有部分。

一旦它将该函数应用于所有拆分后的Dataframe,它就会将拆分后的Dataframe连接起来,并将完整的Dataframe返回给我们。

如何使用它?

那是相当简单滴!

有用吗?

为了检查这个并行函数的性能,在Kaggle内核中的Jupyter notebook 上运行了 %%timeit magic。

vs

只使用函数本身

正如大家所看到的,我们通过使用并行化函数获得了一些性能。它使用的是一个只有2个CPU的Kaggle内核。

在实际的比赛中,需要进行大量的计算,而我们使用的add_features函数要复杂得多。这种并行化的功能极大地帮助我们缩短数据处理时间!

并行化并不是什么灵丹妙药,而是一颗霰弹。

它不会解决你所有的问题,你仍然需要优化更多的功能,但它是你武器库中一个很好的工具。

时间很宝贵,有时我们会觉得时间不够用。在这些时候,我们应该能够轻松地使用并行化。

MATLAB EXPO 2019 微信直播

免费!免费!免费!

—End—

量化投资与机器学习微信公众号,是业内垂直于 Quant MFE CST 等专业的主流量化自媒体。公众号拥有来自 公募、私募、券商、银行、海外 等众多圈内 10W+ 关注者。每日发布行业前沿研究成果和最新资讯。