利用最新版本的dask-sql,可以在SQL中利用庞大的Python ML生态系统

SQL中的机械进修-1.jpg

> Photo by Christopher Burns on Unsplash

偶然很难相信ML之前的天下已经存在。如此多的现代数据分析都建立在ML技术的根本之上,而且在可预见的未来将继续这样做。可是,并非一切人都能从这些庞大的进步中受益,由于利用ML技术首要触及利用Python,开辟代码和了解很多新技术。特别是当大数据和散布式系统进入游戏时,工作变得一团糟。

这是SQL查询引擎试图处理的题目。它们使利用简单但功用强大的SQL号令来利用复杂的散布式系统天下成为能够。dask-sql是一个新的SQL查询引擎(免责声明:我是作者),建立在仅python的Dask散布式库之上。这个新库可让您将Python与SQL和散布式可扩大计较连系起来!(在我的其他一篇文章中领会更多有关它的信息)。

dask-sql的最新版本0.3.0具有对机械进修的尝试性支持,是以明天我们将领会若何利用它。固然,我们将为此利用著名的Iris数据集-数据科学的天下。即使这个特定的数据样本很小,只需将更多的计较节点增加到聚集合,本文中显现的一切内容都可以轻松扩大到大量数据。

旁注:带有dask-sql的ML仍处于实验阶段:-)可以随意尝试,但请谨慎利用。

先决条件和预备

在本文中,我将假定您(或您的数据工程师)已经设备并运转了dask-sql。有关更多信息,请参考文档或此博客文章。我还将假定您经过其SQL Server接口毗连dask-sql,例如经过诸如Apache Hue之类的BI工具,该工具甚至供给了最新版本对dask-sql的本机支持。

假如您正在利用dask-sql的Python接口,则照旧可以继续。只需利用以下单元格初始化Jupyter笔记本
from IPython.core.magic import register_line_cell_magicfrom dask_sql import Context# Create a context to store the tables and modelsc = Context()# Small helper function to make our life [email protected]_line_cell_magicdef sql(line, cell=None):    if cell is None:        cell = line        line = None        if not line:        line = {}    return c.sql(cell, return_futures=False, **line)
在以下代码示例中,在每个SQL号令前加上%% sql,例如
%%sqlSELECT 1 + 1
SQL中的机械进修-2.jpg

加载和预备数据

在这些工作都处理了以后,让我们起头导入数据。由于dask-sql操纵大型的Python和Dask生态系统,您可以从很多分歧的位置读取很多分歧格式的数据样本。在此示例中,我们将以相当标准的CSV格式从Internet提取数据:
CREATE OR REPLACE TABLE iris WITH (    location = 'https://datahub.io/machine-learning/iris/r/iris.csv',    persist = True)
数据集被加载并存储为名为“ iris”的表。persist = True使dask-sql将数据缓存在内存中。

现在,检查数据能否正确加载

DESCRIBE iris

SQL中的机械进修-3.jpg

如您所见,数据范例是自动分派的。我们可以利用以下标准SQL号令显现数据的前十行:
SELECT * FROM iris LIMIT 10
SQL中的机械进修-4.jpg

鸢尾花数据集的简要先容:如上面的输出所示,数据集描写了鸢尾花及其品种的丈量成果。它是机械进修中的标准数据集之一,可以用作很多范例的ML方式的示例。在此示例中,我们将利用无监视的聚类算法。

在起头培训之前,让我们首先在每个ML管道中履行另一个重要步调:特征提取。由于我不是生物学家,是以在此仅以一个很是简单且幼稚的新功用为例:将萼片长度乘以萼片宽度。还可以利用SQL语句和函数天生更复杂的功用。假如这还不够,dask-sql答应注册用Python编写的用户界说函数(UDF)。
SELECT     *,     sepallength * petallength AS new_feature FROM irisLIMIT 10
SQL中的机械进修-5.jpg

为了让我们的生活更轻松,让我们为该增强型表引入一个体名
CREATE OR REPLACE TABLE transformed_data AS (    SELECT         *,         sepallength * petallength AS new_feature    FROM iris)
我们现在预备利用机械进修!

练习机械进修模子

机械进修模子的品种繁多,从简单的模子(如线性回归)到强大的Boosted Decision Trees,再到最早辈的研讨模子(如Transformers)。其中很多是在著名的scikit-learn Python软件包中实现的,是以(在很多其他库中)可在dask-sql中利用。

在此示例中,我们利用了k-Means聚类算法。简而言之,它将数据集分组为具有类似特征的行簇。假如一切顺遂,我们希望它可以将不异物种的花朵聚在一路-而无需我们告诉算法。让我们看看该算法的性能若何(破坏者:不是很好)。假如您想领会有关与dask-sql兼容的模子及其设备的更多信息,倡议您阅读一下文档。

是以,让我们将聚类算法利用于数据!
CREATE OR REPLACE MODEL clustering WITH (    model_class = 'sklearn.cluster.KMeans',    wrap_predict = True,    n_clusters = 3) AS (    SELECT sepallength, sepalwidth, petallength, petalwidth, new_feature    FROM transformed_data)
如您所见,我们利用了一个新的SQL机关CREATE MODEL停止练习,它获得一些参数来指定要练习的模子。在我们的例子中,我们从scikit-learn当挑选k-Means算法,并将我们期望的组或簇数设备为三个(由于我们有三个品种)。scikit-learn软件包中的算法在中等巨细的数据上可以很好地工作,假如您需要超越此范围,请检察dask-ml。

培训应立即完成(由于总数据集很小),是以我们可以继续检查猜测。

检查性能

SELECT * FROM PREDICT (    MODEL clustering,    SELECT * FROM transformed_data    LIMIT 10)
SQL中的机械进修-6.jpg

该SQL语句将练习有素的模子利用于给定的数据,并向其中增加带有模子的猜测方针的新列“方针”。畴前十行来看,它看起来不错(一切“ setosa”都有不异的猜测方针)。是以,我们再次引入别名以停止更多计较
CREATE OR REPLACE TABLE iris_results AS (    SELECT class AS label, target AS predicted FROM PREDICT (        MODEL clustering,        SELECT * FROM transformed_data    ))
为了简短起见,我们只快速阅读一下成果,并检查物种和猜测簇的散布。
SELECT     label, predicted, COUNT(*) AS numbersFROM iris_resultsGROUP BY label, predicted
SQL中的机械进修-7.jpg

一点都不完善,可是荣幸的是,这不是关于ML的文章,所以我将跳过优化步调:-)。您的BI工具能够可以自动绘制这些数字,而且作为python用户,您可以利用
df = c.sql("""SELECT     label, predicted, COUNT(*) AS numbersFROM iris_resultsGROUP BY label, predicted""", return_futures=False)df = df.set_index(["label", "predicted"])df.numbers.unstack(0).plot.bar(ax=plt.gca())
SQL中的机械进修-8.jpg

提要

感激您关注这篇文章直到最初!我们已经先容了相当多的材料,所以这里有个简短的回首:
    SQL查询引擎很酷,由于您可以利用它们利用具有简单SQL语法(以及很多把戏)的复杂散布式系统来查询复杂数据。dask-sql就是其中之一,它与Python生态系统的交互出格简单(由于它建立在Dask之上,Dask是可扩大Python利用法式的库)。益处之一是可以轻松集成各类Python ML库,例如scikit-learn包中的k-Means算法,如本博文所示。另一个益处是,一切都可以经过利用SQL来完成!

假如您想领会更多信息,请转至文档,然后对数据停止SQL处置。

(本文由闻数起舞翻译自Rebecca Vickery的文章《Machine Learning in SQL — it actually works!》,转载请说明出处,原文链接:https://towardsdatascience.com/machine-learning-in-sql-it-actually-works-56e8d91fc273)
温馨提示:
好向圈www.kuaixunai.com是各行业经验分享交流社区,你可以在这里发布交流经验,也可以发布需求与服务,经验圈子里面禁止带推广链接、联系方式、违法词等,违规将封禁账号,相关产品信息将永久不予以通过,同时有需要可以发布在自己的免费建站官网里面或者广告圈, 下载好向圈APP可以加入各行业交流群 本文不代表好向圈的观点和立场,如有侵权请下载好向圈APP联系在线客服进行核实处理。
审核说明:好向圈社区鼓励原创内容发布,如果有从别的地方拷贝复制将不予以通过,原创优质内容搜索引擎会100%收录,运营人员将严格按照上述情况进行审核,望告知!
回复

使用道具 举报

已有(6)人评论

跳转到指定楼层
我叫一点也坚强 发表于 2021-3-23 08:56:14
这和链接数据库后自己定义函数有啥区别[捂脸]
回复

使用道具 举报

李蔚航 发表于 2021-3-24 07:00:18
转发了
回复

使用道具 举报

消逝的度娘 发表于 2021-3-25 02:18:03
转发了
回复

使用道具 举报

永远的紫色蔷薇 发表于 2021-3-25 19:27:18
转发了
回复

使用道具 举报

告白气球biu1 发表于 2021-3-26 05:51:00
转发了
回复

使用道具 举报

浪的飞了 发表于 2021-3-27 09:08:55
转发了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

24小时热文