去年就偶遇MindsDB,过后docker部署体验,bug太多,间接放弃。近期晃荡github趋势,MindsDB再次出现(上了周榜)。想必是Bug修复了,能稳固运行,决定再深度应用它,看看能不能在生产环境中施展些作用(刮目相待~)。

0、个别建模姿态

个别咱们依据业务场景进行建模,按以下模块进行解决(这里只探讨机器学习建模):

  • 数据预处理:获取所需数据(from数据库or数仓)、数据荡涤并标签化、特色工程;
  • 模型构建:模型抉择、参数优化、集成算法、模型验证;
  • 模型上线:模型部署、运行监控、模型改良;

想要实现以上模块,要求数据分析师对业务知识、数据处理、模型实践、工程代码均比拟相熟,也比拟耗时、耗人力,甚至会失去最终成果不现实的后果~

模型成果不好,个别有以下几个起因(可能不全哈~):

  1. 数据品质自身就不高,比如说某强特色缺失比较严重;
  2. 数据量不大,几千条数据预计也很难构建强壮的模型;
  3. 特色不够多,与target相关性自身就很低;
  4. 特色工程做的不好, 模型没学好;
  5. 模型抉择得不好,很多trick没用上;模型没优化好;

对于业务数据分析师来说,以上几点都须要通过对机器学习有深刻的了解和一直实际总结经验能力解决。但很多状况下是,一顿操作下来,不如他人画个回归来的切实。

1、什么是MindsDB

MindsDB利用AI-table的概念将机器学习引入现有的SQL数据库。AI表将机器学习模型集成为数据库中的虚构表,创立预测,并能够应用简略的SQL语句进行查问。简直能够立刻在数据库中间接进行工夫序列、回归和分类预测

MindsDB可间接在数据库中进行建模,省去了数据处理、搭建机器学习模型等头疼的步骤,能够说是一步到位。对于数据分析师、商业分析师毋庸理解过多数据工程、建模常识,即可开箱应用,十分难受(一下子升高了建模门槛,人人都是数据分析师,人人都会利用算法了~)。其实这类工具不少,还有一些图形化界面的机器学习平台,这里不作探讨,咱们重点开掘mindsdb的特点。

先来看看MindsDB架构图:

上图中,右边是数据库or数据仓库,左边是建模罕用的python库,mindsdb在两头,相当于间接连贯了数据与模型。

既然这么爽,就来体验下这个开源产品~

2、装置部署

我的部署环境:Centos7,Mysql8,Python3.6

MindsDB装置

依据官网文档的指引,我这边抉择linux服务器进行部署(也能够用Docker部署哦~)。

特地揭示:最好在python3.6环境以上进行,版本太低了,预计各种依赖问题。

  1. 创立虚拟环境;
  2. 间接pip装置(有些耗时,要下载的包很多很多....如果网络问题,能够手动下载whl进行装置);
  3. pip freeze,看看如果不报错,阐明装置胜利了。

另外,我这边选用mysql作为数据库,这边反对的数据库有很多种,根本笼罩但没oracle的。

特地揭示:如果采纳mysql,则须要mysql8,mysql5没用,就算部署胜利也没法用(别问我怎么晓得的~)

3、配置与运行

mindsdb提供mysql api,有个GUI界面可不便连贯数据库、上传数据,须要批改一下json配置文件。

config.json配置:

当初能够启动MindsDB服务啦~

  1. 进入MindsDB虚拟环境;
  2. python3 -m mindsdb --api=http,mysql --config=config.json

看到这2局部,阐明mindsdb数据库以及api接口也启动胜利了。

拜访api接口:

首次连贯,须要配置一下须要连贯的数据库,并测试连贯:

服务器端登陆mindsdb数据库:

mysql -h 127.0.0.1 --port 47335 -u root-p (能够更改配置文件中的配置,我这里就把用户名改成了root)

4、应用MindsDB建模

下图中,第二个数据库就是MindsDB,第四个数据库就是内部连贯的Mysql。

依据官网文档的介绍,重点关注的就是这张predictors表,暂且叫预测器。对于预测器,文档有具体的参数介绍,这里就不多介绍了。

学习一个产品,先理解根本的架构、概念、进行简略demo实现,再去做深挖,升高学习曲线,不然很容易放弃。

本着这个准则,咱们也不搞花里花哨的,先把一个简略的模型跑起来看看,跑通这个产品先。

官网示例:客户散失预测 https://docs.mindsdb.com/sql/...

建设预测过程的规范代码:

  • predictor_name (string) - 模型名称;
  • integration_name (string) - 所连贯的内部数据库的名称;
  • column_name (string) - 咱们想要预测的列;
CREATE PREDICTOR predictor_nameFROM integration_name (SELECT column_name, column_name2 FROM table_name)PREDICT column_name as column_alias;

依据介绍,咱们换个数据实操一下,就拿万年helloworld数据集--泰坦尼克号作为例子。

  1. 下载数据集,导入数据至内部数据库中(mysql8),为了简化过程,删除了一些类别列;

  1. 切换到mindsdb数据库中,创立预测过程;

    CREATE PREDICTOR taitan_model FROM MYSQL8 (SELECT * FROM taitan)PREDICT survived as cus_survived;
  2. 查看模型后果

    status=‘complete’示意模型跑完了,acc=0.699,不是很高哈,可能是我删除了很多无效特色(这个不重要哈,次要是想疾速跑通这个流程~)

    SELECT * FROM predictors WHERE name='taitan_model';

看运行日志能够发现,主动建模的过程中,采纳了神经网络和lightgbm,最初比拟后果,抉择了lightgbm。

依据训练好的模型,进行简略预测:

SELECT Survived, Survived_confidence, Survived_explain as Info  FROM mindsdb.taitan_model WHERE when_data='{"Pclass": 1, "AAge": 25, "Parch": 0, "SibSp": 1, "Embarked": "S"}';

输出不同特征值,模型输入预测后果:

对于输出特色,预测后果为 Survived=1,并且还给出了置信度=99%。

5、官网示例

官网给出了比拟多的示例,咱们再看一个时序预测的示例:

数据集来自美国芝加哥交通管理局的公交乘车数据,该数据形容的是每条公交线路每天的乘车次数:

  1. 进入mindsdb数据库

    use mindsdb;show tables
  2. 建设预测模型

    CREATE PREDICTOR rides_forecaster_demo FROM snf (SELECT ROUTE, RIDES, DATEFROM CHICAGO_TRANSIT_AUTHORITY.PUBLIC.CTA_BUS_RIDES_LATEST WHERE DATE > '2020-01-01') PREDICT RIDES ORDER BY DATE GROUP BY ROUTEWINDOW 10 HORIZON 7;
  • rides_forecaster_demo:模型名称
  • PREDICT RIDES :预测rides字段的值
  • order by date : 依据date排序(时序预测,对工夫进行排序)
  • group by route :依据route分组(因为有多条route,不同route对应的数据别离进行预测);
  • window:工夫窗口,这里的10代表依据后面的10条数据进行预测;
  • horizon:预测期数,代表预测将来多少天的数据;
  1. 预测后果

    这里将历史数据连贯预测模型表,输入后果:

    SELECT tb.ROUTE, tb.RIDES AS PREDICTED_RIDESFROM snf.PUBLIC.CTA_BUS_RIDES_LATEST AS taJOIN mindsdb.rides_forecaster_demo AS tb WHERE ta.ROUTE = "171" AND ta.DATE > LATESTLIMIT 7;

    ta.ROUTE = 171":选取171线路;

    ta.DATE > LATEST(这个由mindsdb提供):获取每条路线将来的乘车次数;

    LIMIT 7:预测将来7天的数据;

6、体验感触

MindsDB的确是一款十分新鲜的建模产品,能间接在数据库中进行建模,给人耳目一线的感觉。国内也有一个开源产品叫Byzer,写sql就能进行建模,能够去深度体验一下。

MindsDB的劣势在于,直连数据库并通过简略的SQL关键字即可在数据库中实现建模。

劣势在于,很多SQL关键字还有一些bug(比方创立预测过程时,第一次运行会报错),并且部署也较麻烦,很多包无奈一键装置,须要手动下载并写入环境变量里,不然建模失败(类别特色会用到nltk_data分词解决,盲猜是用相似于nlp解决词向量的形式对类别特色进行编码?)

以后这个产品,还不能很好的投入生产环境中应用,但有几个场景还是比拟不便,可酌情抉择:

  1. 疾速建模,验证数据品质,比如说某业务场景下,数据荡涤好了,需做预测,能够先通过MindsDB建模,看看基于以后数据,模型baseline能到多少,进一步测验以后数据品质;
  2. 对于一些时序稳固的场景,可间接上MindsDB进行时序预测;
  3. 对于分类、回归场景,如果以后数据及特色能失去很好的预测成果(基于之前的建模教训),也能够间接上MindsDB;

参考链接:

  1. https://docs.mindsdb.com/
  2. GitHub - mindsdb/mindsdb: In-Database Machine Learning

欢送关注集体公众号:DS数说

原文章链接:https://mp.weixin.qq.com/s?__...