一条SQL语句搞定机器学习模型?

共 3420字,需浏览 7分钟

 ·

2020-10-25 20:45

这条SQL长啥样?

INSERT INTO mindsdb.`predictors`       (`name`, `predict`, `select_data_query`)VALUES ('bikes_model', 'count', 'SELECT * FROM test.bike_data');


一条简单的语句实现创建、训练、测试和发布机器模型。

INSERT INTO mindsdb.predictors(name, predict, select_data_query)VALUES('','columns to prediect','query to trainfrom')


是的,插入一条语句(最少只需要三个值)到mindsdb.`predictors`就好了,

  • , 模型名,也是预测时用于访问的表名,MindsDB叫它AI-Table

  • columns to predict,预测变量(可以不止一个)

  • query to trainfrom, 就是训练数据,一般是一个SQL语句


MindsDB

今天的主角就是MindsDB[1], 它为现有数据库提供了一个开源AI层,可以让我们轻松使用SQL查询来开发,训练和部署最新的机器学习模型。

下面MariaDB为例, 通过一个简单的例子来对MindsDB有个直观的认识。



准备工作


软件环境

  • Python >=3.6

  • MariaDB >=10.02,因为需要CONNECT Storage Engine(CONNECT存储引擎)

  • MindsDB >= 2.0.0


安装MariaDB

具体过程略,这里只强调一条,启用CONNECT存储引擎[2],如果没有该存储引擎,请另外安装(MySQL是FEDERATED

INSTALL SONAME 'ha_connect';


安装MindsDB

pip install -U mindsdb


准备config.json

{    "api": {        "http": {            "host": "0.0.0.0",            "port": "47334"        },        "mysql": {            "host": "127.0.0.1",            "password": "password",            "port": "47335",            "user": "root"        }    },    "config_version": "1.3",    "debug": true,    "integrations": {        "default_mariadb": {            "enabled": true,            "host": "127.0.0.1",            "port": 3306,            "type": "mariadb",            "user": "root"        }    },    "storage_dir": "/data/mindsdb/datastore",     "interface":{       "datastore": {           "enabled"false       },      "mindsdb_native": {           "enabled"true       }     }}


运行mindsdb

python3 -m mindsdb  --config=config.json --api=mysql



数据准备

本次数据来自Kaggle的共享单车项目[3]

DROP TABLES if EXISTS test.`bike_data`;-- 创建表CREATE TABLE test.`bike_data` (  `datetime` datetime DEFAULT NULL,  `season` int(11) DEFAULT NULL,  `holiday` int(11) DEFAULT NULL,  `workingday` int(11) DEFAULT NULL,  `weather` int(11) DEFAULT NULL,  `temp` double DEFAULT NULL,  `atemp` double DEFAULT NULL,  `humidity` double DEFAULT NULL,  `windspeed` double DEFAULT NULL,  `casual` int(11) DEFAULT NULL,  `registered` int(11) DEFAULT NULL,  `count` int(11) DEFAULT NULL);    -- 快速导入本地数据  LOAD DATA LOCAL INFILE   '/data/bike-sharing-demand/train.csv'   INTO TABLE bike_data columns    terminated by ','    IGNORE 1 LINES;


训练模型


INSERT INTO mindsdb.`predictors`       (`name`, `predict`, `select_data_query`)VALUES ('bikes_model', 'count', 'SELECT * FROM test.bike_data');


这一步需要多少时间,视机器性能和模型复杂程度而定,可以通过如下SQL判断模型是否训练结束,

select * from mindsdb.predictors where name='bikes_model';

返回


namestatusaccuracy
bikes_modelcomplete0.998

通过status(状态)可以得知,训练结束了,精确度 0.998。



查询模型(预测)

SELECT count, count_confidenceFROM mindsdb.bikes_modelWHERE datetime='2011-01-20 00:00:00' AND     season='1' AND     holiday='0' AND     workingday='1' AND     weather='1' AND     temp='10.66' AND     atemp='11.365' AND     humidity='56' AND     windspeed='26.0027' AND     registered=13 ;

返回结果

countcount_confidence
210.99


删除模型

DELETE FROM mindsdb.predictors WHERE name='bikes_model'


到此,一个完整的流程结束。


更多功能


更多数据库支持

MindsDB不仅仅支持MariaDB,还支持Clickhouse, MySql, Postgres, MSSQL, Mongo, Snowflake。


支持API和网页访问


支持训练和预测多个特征


链接


[1] https://mindsdb.com

[2] https://mariadb.com/kb/en/installing-the-connect-storage-engine/

[3] https://www.kaggle.com/c/bike-sharing-demand/

我的朋友圈更精彩

推荐阅读

(点击标题可跳转阅读)

Tensorflow的妙用

Python 200个标准库汇总!

机 器 学 习 中 的 数 学 意 义

玩转 Jupyter Notebook

神 经 网 络 内 部 长 啥 样?

老铁,三连支持一下,好吗?↓↓

浏览 60
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报