文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如果不能用Python执行机器学习,那该用什么呢?

2024-12-03 17:30

关注

长期学习数据科学的人一定知道如何用Python、R和Julia这些语言执行机器学习任务。然而,如果速度很关键,但硬件很有限,或者所在公司仅使用SQL进行预测分析,又该怎么办呢?答案就是——数据库内的机器学习。

[[350860]]

本文使用的是Oracle Cloud。它是免费的,你可以注册并创建一个OLTP数据库 (19c版本,有0.2TB的存储空间)。完成之后,下载云钱包并通过SQL Developer或任何其他工具建立连接。这个过程至少要花费10分钟,但操作很简单,所以这里不多做赘述。

下面将使用Oracle机器学习(OML)在著名的Iris数据集中训练一个分类模型。选择它是因为无须任何准备,只需要创建表格并插入数据。 

数据准备

如前所述,要创建一个表格来保存Iris数据集,然后将数据加载到其中。OML要求使用一个列作为行ID(序列),因此要记住: 

  1. CREATE SEQUENCE seq_iris; 
  2. CREATE TABLE iris_data( 
  3.     iris_id      NUMBER DEFAULT seq_iris.NEXTVAL, 
  4.     sepal_length NUMBER, 
  5.     sepal_width  NUMBER, 
  6.     petal_length NUMBER, 
  7.     petal_width  NUMBER, 
  8.     species      VARCHAR2(16) 
  9. ); 

现在可以下载数据并进行加载了: 

当一个模态窗口弹出时,只需提供下载CSV的路径并多次点击Next。SQL开发员无需帮助也能正确完成工作。 

模型训练

现在可以动手做一些有趣的事情了。训练分类模型可以分解为多个步骤,例如训练/测试分割、模型训练和模型评估,我们从最简单的开始。

训练/测试分割

Oracle常用两个视图完成该步骤:一个用于训练数据,一个用于测试数据。可以轻松创建这些神奇PL/SQL: 

  1. BEGIN 
  2.     EXECUTE IMMEDIATE  
  3.         ‘CREATE OR REPLACE VIEW  
  4.         iris_train_data AS  
  5.         SELECT * FROM iris_data  
  6.         SAMPLE (75) SEED (42)’; 
  7.     EXECUTE IMMEDIATE  
  8.         ‘CREATE OR REPLACE VIEW  
  9.         iris_test_data AS  
  10.         SELECT * FROM iris_data  
  11.         MINUS  
  12.         SELECT * FROM iris_train_data’; 
  13. END

该脚本完成下列两件事:

数据储存在叫做iris_train_data和iris_test_data的视图中,猜猜看它们分别存什么。 

  1. SELECT COUNT(*) FROM iris_train_data; 
  2. >>> 111 
  3. SELECT COUNT(*) FROM iris_test_data; 
  4. >>> 39 

模型训练

模型训练最简单的方法是无须创建额外的设置表格,只执行单一过程的DBMS_DATA_MINING包。使用决策树算法来训练模型。方法如下: 

  1. DECLARE  
  2.     v_setlstDBMS_DATA_MINING.SETTING_LIST; 
  3. BEGIN 
  4.     v_setlst(‘PREP_AUTO’) := ‘ON’; 
  5.     v_setlst(‘ALGO_NAME’) :=‘ALGO_DECISION_TREE’; 
  6.   
  7.     DBMS_DATA_MINING.CREATE_MODEL2( 
  8.         ‘iris_clf_model’, 
  9.         ‘CLASSIFICATION’, 
  10.         ‘SELECT * FROM iris_train_data’, 
  11.         v_setlst, 
  12.         ‘iris_id’, 
  13.         ‘species’ 
  14.     ); 
  15. END

CREATE_MODEL2过程接受多种参数。接着我们对进入的参数进行解释:

执行这一模块需要一到两秒钟,执行完毕就可以开始计算了! 

模型评价

使用该脚本评估此模型: 

  1. BEGIN 
  2.     DBMS_DATA_MINING.APPLY( 
  3.         ‘iris_clf_model’,  
  4.         ‘iris_test_data’,  
  5.         ‘iris_id’,  
  6.         ‘iris_apply_result’ 
  7.     ); 
  8. END

它将iris_clf_model应用于不可见测试数据iris_test_data,并将评估结果存储到iris_apply_result表中。 

行数更多(39×3),但突显了要点。这还不够直观,所以下面以一种稍微不同的方式来展示结果: 

  1. DECLARE  
  2.      CURSOR iris_ids IS  
  3.          SELECT DISTINCT(iris_id) iris_id 
  4.          FROM iris_apply_result  
  5.          ORDER BY iris_id; 
  6.      curr_y      VARCHAR2(16); 
  7.      curr_yhat   VARCHAR2(16); 
  8.      num_correct INTEGER := 0; 
  9.      num_total   INTEGER := 0; 
  10. BEGIN 
  11.     FOR r_id IN iris_ids LOOP 
  12.         BEGIN 
  13.             EXECUTE IMMEDIATE  
  14.                 ‘SELECT species FROM  
  15.                 iris_test_data  
  16.                 WHERE iris_id = ‘ ||r_id.iris_id 
  17.                 INTO curr_y; 
  18.             EXECUTE IMMEDIATE  
  19.                 ‘SELECT prediction  
  20.                 FROM iris_apply_result  
  21.                 WHERE iris_id = ‘ ||r_id.iris_id ||  
  22.                ‘AND probability = ( 
  23.                    SELECTMAX(probability)  
  24.                        FROMiris_apply_result  
  25.                        WHERE iris_id = ‘|| r_id.iris_id ||  
  26.                    ‘)’ INTO curr_yhat; 
  27.         END
  28.   
  29.         num_total := num_total + 1; 
  30.         IF curr_y = curr_yhat THEN  
  31.             num_correct := num_correct +1; 
  32.         END IF;  
  33.     END LOOP; 
  34.   
  35.     DBMS_OUTPUT.PUT_LINE(‘Num. testcases: ‘  
  36.         || num_total); 
  37.     DBMS_OUTPUT.PUT_LINE(‘Num. correct :‘  
  38.         || num_correct); 
  39.     DBMS_OUTPUT.PUT_LINE(‘Accuracy : ‘  
  40.         || ROUND((num_correct /num_total), 2)); 
  41. END

确实很多,但上述脚本不能再简化了。下面进行分解:

下面为该脚本输出: 

 

以上就是模型评估的基本内容。

并不是所有人在工作中都能使用Python,现在,你又掌握了一种解决机器学习任务的方法。

 

 

来源:读芯术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯