本文转载自公众号“读芯术”(ID:AI_Discovery)
长期学习数据科学的人一定知道如何用Python、R和Julia这些语言执行机器学习任务。然而,如果速度很关键,但硬件很有限,或者所在公司仅使用SQL进行预测分析,又该怎么办呢?答案就是——数据库内的机器学习。
本文使用的是Oracle Cloud。它是免费的,你可以注册并创建一个OLTP数据库 (19c版本,有0.2TB的存储空间)。完成之后,下载云钱包并通过SQL Developer或任何其他工具建立连接。这个过程至少要花费10分钟,但操作很简单,所以这里不多做赘述。
下面将使用Oracle机器学习(OML)在著名的Iris数据集中训练一个分类模型。选择它是因为无须任何准备,只需要创建表格并插入数据。
如前所述,要创建一个表格来保存Iris数据集,然后将数据加载到其中。OML要求使用一个列作为行ID(序列),因此要记住:
- CREATE SEQUENCE seq_iris;
- CREATE TABLE iris_data(
- iris_id NUMBER DEFAULT seq_iris.NEXTVAL,
- sepal_length NUMBER,
- sepal_width NUMBER,
- petal_length NUMBER,
- petal_width NUMBER,
- species VARCHAR2(16)
- );
现在可以下载数据并进行加载了:
当一个模态窗口弹出时,只需提供下载CSV的路径并多次点击Next。SQL开发员无需帮助也能正确完成工作。
模型训练
现在可以动手做一些有趣的事情了。训练分类模型可以分解为多个步骤,例如训练/测试分割、模型训练和模型评估,我们从最简单的开始。
训练/测试分割
Oracle常用两个视图完成该步骤:一个用于训练数据,一个用于测试数据。可以轻松创建这些神奇PL/SQL:
- BEGIN
- EXECUTE IMMEDIATE
- ‘CREATE OR REPLACE VIEW
- iris_train_data AS
- SELECT * FROM iris_data
- SAMPLE (75) SEED (42)’;
- EXECUTE IMMEDIATE
- ‘CREATE OR REPLACE VIEW
- iris_test_data AS
- SELECT * FROM iris_data
- MINUS
- SELECT * FROM iris_train_data’;
- END;
- /
该脚本完成下列两件事:
数据储存在叫做iris_train_data和iris_test_data的视图中,猜猜看它们分别存什么。
- SELECT COUNT(*) FROM iris_train_data;
- >>> 111
- SELECT COUNT(*) FROM iris_test_data;
- >>> 39
模型训练
模型训练最简单的方法是无须创建额外的设置表格,只执行单一过程的DBMS_DATA_MINING包。使用决策树算法来训练模型。方法如下:
- DECLARE
- v_setlstDBMS_DATA_MINING.SETTING_LIST;
- BEGIN
- v_setlst(‘PREP_AUTO’) := ‘ON’;
- v_setlst(‘ALGO_NAME’) :=‘ALGO_DECISION_TREE’;
- DBMS_DATA_MINING.CREATE_MODEL2(
- ‘iris_clf_model’,
- ‘CLASSIFICATION’,
- ‘SELECT * FROM iris_train_data’,
- v_setlst,
- ‘iris_id’,
- ‘species’
- );
- END;
- /
CREATE_MODEL2过程接受多种参数。接着我们对进入的参数进行解释:
执行这一模块需要一到两秒钟,执行完毕就可以开始计算了!
使用该脚本评估此模型:
- BEGIN
- DBMS_DATA_MINING.APPLY(
- ‘iris_clf_model’,
- ‘iris_test_data’,
- ‘iris_id’,
- ‘iris_apply_result’
- );
- END;
- /
它将iris_clf_model应用于不可见测试数据iris_test_data,并将评估结果存储到iris_apply_result表中。
行数更多(39×3),但突显了要点。这还不够直观,所以下面以一种稍微不同的方式来展示结果:
- DECLARE
- CURSOR iris_ids IS
- SELECT DISTINCT(iris_id) iris_id
- FROM iris_apply_result
- ORDER BY iris_id;
- curr_y VARCHAR2(16);
- curr_yhat VARCHAR2(16);
- num_correct INTEGER := 0;
- num_total INTEGER := 0;
- BEGIN
- FOR r_id IN iris_ids LOOP
- BEGIN
- EXECUTE IMMEDIATE
- ‘SELECT species FROM
- iris_test_data
- WHERE iris_id = ‘ ||r_id.iris_id
- INTO curr_y;
- EXECUTE IMMEDIATE
- ‘SELECT prediction
- FROM iris_apply_result
- WHERE iris_id = ‘ ||r_id.iris_id ||
- ‘AND probability = (
- SELECTMAX(probability)
- FROMiris_apply_result
- WHERE iris_id = ‘|| r_id.iris_id ||
- ‘)’ INTO curr_yhat;
- END;
- num_total := num_total + 1;
- IF curr_y = curr_yhat THEN
- num_correct := num_correct +1;
- END IF;
- END LOOP;
- DBMS_OUTPUT.PUT_LINE(‘Num. testcases: ‘
- || num_total);
- DBMS_OUTPUT.PUT_LINE(‘Num. correct :‘
- || num_correct);
- DBMS_OUTPUT.PUT_LINE(‘Accuracy : ‘
- || ROUND((num_correct /num_total), 2));
- END;
- /
确实很多,但上述脚本不能再简化了。下面进行分解:
下面为该脚本输出:
以上就是模型评估的基本内容。
并不是所有人在工作中都能使用Python,现在,你又掌握了一种解决机器学习任务的方法。
当前文章:如果不能用Python执行机器学习,那该用什么呢?
当前链接:http://www.csdahua.cn/qtweb/news22/352072.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网