去年就偶遇 MindsDB,过后 docker 部署体验,bug 太多,间接放弃。近期晃荡 github 趋势,MindsDB 再次出现(上了周榜)。想必是 Bug 修复了,能稳固运行,决定再深度应用它,看看能不能在生产环境中施展些作用(刮目相待~)。
0、个别建模姿态
个别咱们依据业务场景进行建模,按以下模块进行解决(这里只探讨机器学习建模):
- 数据预处理:获取所需数据(from 数据库 or 数仓)、数据荡涤并标签化、特色工程;
- 模型构建:模型抉择、参数优化、集成算法、模型验证;
- 模型上线:模型部署、运行监控、模型改良;
想要实现以上模块,要求数据分析师对业务知识、数据处理、模型实践、工程代码均比拟相熟,也比拟耗时、耗人力,甚至会失去最终成果不现实的后果~
模型成果不好,个别有以下几个起因(可能不全哈~):
- 数据品质自身就不高,比如说某强特色缺失比较严重;
- 数据量不大,几千条数据预计也很难构建强壮的模型;
- 特色不够多,与 target 相关性自身就很低;
- 特色工程做的不好,模型没学好;
- 模型抉择得不好,很多 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 环境以上 进行,版本太低了,预计各种依赖问题。
- 创立虚拟环境;
- 间接 pip 装置(有些耗时,要下载的包很多很多 …. 如果网络问题,能够手动下载 whl 进行装置);
- pip freeze,看看如果不报错,阐明装置胜利了。
另外,我这边选用 mysql 作为数据库,这边反对的数据库有很多种,根本笼罩但没 oracle 的。
特地揭示:如果采纳 mysql,则须要mysql8,mysql5 没用,就算部署胜利也没法用(别问我怎么晓得的~)
3、配置与运行
mindsdb 提供 mysql api,有个 GUI 界面可不便连贯数据库、上传数据,须要批改一下 json 配置文件。
config.json 配置:
当初能够启动 MindsDB 服务啦~
- 进入 MindsDB 虚拟环境;
- 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_name
FROM integration_name
(SELECT column_name, column_name2 FROM table_name)
PREDICT column_name as column_alias;
依据介绍,咱们换个数据实操一下,就拿万年 helloworld 数据集 – 泰坦尼克号作为例子。
- 下载数据集,导入数据至内部数据库中(mysql8),为了简化过程,删除了一些类别列;
-
切换到 mindsdb 数据库中,创立预测过程;
CREATE PREDICTOR taitan_model FROM MYSQL8 (SELECT * FROM taitan) PREDICT survived as cus_survived;
-
查看模型后果
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、官网示例
官网给出了比拟多的示例,咱们再看一个时序预测的示例:
数据集来自美国芝加哥交通管理局的公交乘车数据,该数据形容的是每条公交线路每天的乘车次数:
-
进入 mindsdb 数据库
use mindsdb; show tables
-
建设预测模型
CREATE PREDICTOR rides_forecaster_demo FROM snf ( SELECT ROUTE, RIDES, DATE FROM CHICAGO_TRANSIT_AUTHORITY.PUBLIC.CTA_BUS_RIDES_LATES T WHERE DATE > '2020-01-01') PREDICT RIDES ORDER BY DATE GROUP BY ROUTE WINDOW 10 HORIZON 7;
- rides_forecaster_demo:模型名称
- PREDICT RIDES:预测 rides 字段的值
- order by date : 依据 date 排序(时序预测,对工夫进行排序)
- group by route:依据 route 分组(因为有多条 route,不同 route 对应的数据别离进行预测);
- window:工夫窗口,这里的 10 代表依据后面的 10 条数据进行预测;
- horizon:预测期数,代表预测将来多少天的数据;
-
预测后果
这里将历史数据连贯预测模型表,输入后果:
SELECT tb.ROUTE, tb.RIDES AS PREDICTED_RIDES FROM snf.PUBLIC.CTA_BUS_RIDES_LATEST AS ta JOIN mindsdb.rides_forecaster_demo AS tb WHERE ta.ROUTE = "171" AND ta.DATE > LATEST LIMIT 7;
ta.ROUTE = 171″:选取 171 线路;
ta.DATE > LATEST(这个由 mindsdb 提供):获取每条路线将来的乘车次数;
LIMIT 7:预测将来 7 天的数据;
6、体验感触
MindsDB 的确是一款十分新鲜的建模产品,能间接在数据库中进行建模,给人耳目一线的感觉。国内也有一个开源产品叫Byzer,写 sql 就能进行建模,能够去深度体验一下。
MindsDB 的劣势在于,直连数据库并通过简略的 SQL 关键字即可在数据库中实现建模。
劣势在于,很多 SQL 关键字还有一些 bug(比方创立预测过程时,第一次运行会报错),并且部署也较麻烦,很多包无奈一键装置,须要手动下载并写入环境变量里,不然建模失败(类别特色会用到 nltk_data 分词解决,盲猜是用相似于 nlp 解决词向量的形式对类别特色进行编码?)
以后这个产品,还不能很好的投入生产环境中应用,但有几个场景还是比拟不便,可酌情抉择:
- 疾速建模,验证数据品质,比如说某业务场景下,数据荡涤好了,需做预测,能够先通过 MindsDB 建模,看看基于以后数据,模型 baseline 能到多少,进一步测验以后数据品质;
- 对于一些时序稳固的场景,可间接上 MindsDB 进行时序预测;
- 对于分类、回归场景,如果以后数据及特色能失去很好的预测成果(基于之前的建模教训),也能够间接上 MindsDB;
参考链接:
- https://docs.mindsdb.com/
- GitHub – mindsdb/mindsdb: In-Database Machine Learning
欢送关注集体公众号:DS 数说
原文章链接:https://mp.weixin.qq.com/s?__…