12、机器学习模型构建与应用全流程解析

机器学习模型构建与应用全流程解析

1. 模型创建

在机器学习中,模型创建是关键的第一步。以下是一个模型创建过程的示例代码:

declare
  v_xlst dbms_data_mining_transform.TRANSFORM_LIST;
BEGIN
  dbms_data_mining_transform.set_transform(v_xlst,
    'HOME_THEATER_PACKAGE', NULL, 'HOME_THEATER_PACKAGE',
    'HOME_THEATER_PACKAGE', 'FORCE_IN');
  DBMS_DATA_MINING.CREATE_MODEL(
    model_name          => 'GLMR_SH_Regr_sample',
    mining_function     => dbms_data_mining.regression,
    data_table_name     => 'mdb_rdemo_v',
    case_id_column_name => 'cust_id',
    target_column_name  => 'age',
    settings_table_name => 'glmr_sh_sample_settings',
    xform_list          => v_xlst);
END;

在这段代码中,我们首先声明了一个 TRANSFORM_LIST 类型的变量 v_xlst ,然后设置了一个转换规则,将 HOME_THEATER_PACKAGE 强制包含在模型中。最后,使用 DBMS_DATA_MINING.CREATE_MODEL 过程创建了一个名为 GLMR_SH_Regr_sample 的回归模型。

2. 模型评估

模型创建完成后,需要对其准确性进行评估。对于监督学习模型,如分类模型,可以将新创建的模型应用于测试数据,并将模型的预测结果与测试数据中的目标值进行比较。模型评估主要包括两个步骤:模型应用和结果比较。

2.1 模型应用

使用 DBMS_DATA_MINING 包中的 APPLY 过程将模型应用于测试数据表,并将模型结果写入结果表。其语法如下:

DBMS_DATA_MINING.APPLY (
      model_name IN VARCHAR2,
      data_table_name IN VARCHAR2,
      case_id_column_name IN VARCHAR2,
      result_table_name IN VARCHAR2,
      data_schema_name IN VARCHAR2 DEFAULT NULL);

参数说明:
| 参数 | 说明 |
| ---- | ---- |
| model_name | 模型的名称 |
| data_table_name | 包含要测试数据的表或视图的名称 |
| case_id_column_name | 案例标识符列的名称 |
| result_table_name | 存储应用结果的表的名称 |
| data_schema_name | 包含要评分数据的模式的名称 |

示例代码:

DBMS_DATA_MINING.APPLY(
      model_name         => 'N1_CLASS_MODEL',
      data_table_name    => 'N1_TEST_DATA',
      case_id_column_name => 'CUSTOMER_ID',
      result_table_name  => 'N1_APPLY_RESULT');
2.2 结果比较

使用 DBMS_DATA_MINING 包中的 COMPUTE_LIFT 过程计算提升度,这是二元分类模型的一个测试指标。其语法如下:

DBMS_DATA_MINING.COMPUTE_LIFT (
      apply_result_table_name =>      'N1_APPLY_RESULT',
      target_table_name       => 'N1_TEST_DATA',
      case_id_column_name     => 'CUSTOMER_ID',
      target_column_name      => 'CREDIT_SCORE_BIN',
      lift_table_name         =>  'N1_LEFT_TABL',
      positive_target_value   =>  'GOOD CREDIT',
      score_column_name       =>       'PREDICTION',
      score_criterion_column_name =>'PROBABILITY',
      num_quantiles             => 100);

参数说明:
| 参数 | 说明 |
| ---- | ---- |
| apply_result_table_name | 存储应用结果的表的名称 |
| target_table_name | 存储测试数据集的表的名称 |
| case_id_column_name | 案例标识符列的名称 |
| target_column_name | 目标列的名称 |
| lift_table_name | 提升表的名称 |
| positive_target_value | 正目标的值 |
| score_column_name | 应用结果表中表示分数的列的名称;默认值为 PREDICTION |
| score_criterion_column_name | 应用结果表中表示分数排名因子的列的名称;默认值为 PROBABILITY |
| num_quantiles | 提升表中所需的分位数数量 |

为了查看模型的提升结果,可以查询提升表 N1_LIFT_TABLE

SELECT QUANTILE_NUMBER, GAIN_CUMULATIVE FROM N1_LIFT_TABLE;

在OML Notebooks的图形显示选项中,这些查询结果可以显示为增益和提升图,通过计算使用模型和不使用模型所获得的结果之间的比率来衡量分类模型的有效性。

3. 模型评分和部署

模型评分(也称为模型应用)是将模型应用于新数据的过程。使用OML4SQL时,可以通过SQL语言函数在数据库中执行模型评分。

3.1 使用 PREDICTION 函数
SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM new_data_v
WHERE PREDICTION(dt_sh_clas_sample USING *) = 1
GROUP BY cust_gender
ORDER BY cust_gender;

在这个示例中, PREDICTION 函数使用 USING * 表示选择所有属性作为预测因子。也可以指定部分属性作为预测因子:

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION(dt_sh_clas_sample USING
cust_gender,cust_marital_status,
occupation, cust_income_level) = 1
GROUP BY cust_gender
ORDER BY cust_gender;

还可以使用表达式作为预测因子:

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION(dt_sh_clas_sample USING
cust_gender, cust_marital_status, occupation,
'L: 300,000 and above' AS cust_income_level) = 1
GROUP BY cust_gender
ORDER BY cust_gender;
3.2 使用 DBMS_DATA_MINING.APPLY 过程
Exec DBMS_DATA_MINING.APPLY ('N1_CLASS_MODEL', 'N1_NEW_DATA', 'CUSTOMER_ID','N1_NEW_RESULT')

这个过程将 N1_CLASS_MODEL 模型应用于新的 N1_NEW_DATA 数据集表,并生成一个名为 N1_NEW_RESULT 的结果表。可以查询这个结果表来查看每个客户ID的概率:

Select CUSTOMER_ID,PREDICATION,PROBABILITY from N1_NEW_RESULT;

模型部署是将模型应用于生产环境的过程。OML4SQL支持在各种应用生产环境中进行实时和批量模型评分,模型应用可能涉及提取模型详细结果以生成报告、通过合并预测结果扩展商业智能,或者将模型从模型训练数据库导出/导入到模型评分数据库环境。

4. 机器学习项目示例

接下来,我们将通过一个具体的示例来展示如何在ADW Oracle Machine Learning环境中构建和应用机器学习模型。

4.1 数据准备和转换

本示例使用ADW数据库中样本SH模式的 SUPPLEMENTARY_DEMOGRAPHICS 表。该表有14列,每行存储一个案例的信息。目标属性 home_theater_package 的值为1或0,表示客户是否会购买家庭影院套餐。

首先,探索目标数据分布:

select cust_id, HOME_THEATER_PACKAGE from sh.supplementary_demographics;

为了可视化数据,可以在OML笔记本中调整显示设置:
1. 点击柱状图图标并展开设置。
2. 将 HOME_THEATER_PACKAGE 拖到键,将 CUST_ID 拖到值。组中应没有内容。
3. 点击值中的 CUST_ID 并选择计数。

同样,可以查询 YRS_RESIDENCE Y_BOX_GAMES 列按 HOME_THEATER_PACKAGE 列分组的客户数量的图形分布:

SELECT COUNT(CUST_ID) AS NUM_CUSTOMERS, Y_BOX_GAMES, YRS_RESIDENCE, HOME_THEATER_PACKAGE
  FROM SH.SUPPLEMENTARY_DEMOGRAPHICS
  GROUP BY Y_BOX_GAMES, YRS_RESIDENCE, HOME_THEATER_PACKAGE

为了显示按组划分的客户数量分布,可以在OML笔记本中进行以下操作:
1. 点击柱状图图标并展开设置。
2. 将 Y_BOX_GAMES YRS_RESIDENCE 拖到键。将 HOME_THEATER_PACKAGE 拖到组。
3. 点击值中的 NUM_CUSTOMERS 并选择求和。
4. 点击“堆叠”按钮。

为了准备数据,创建一个基于 SH.SUPPLEMENTARY_DEMOGRAPHICS 的视图 DEMOGRAPHICS_HTP_V

%sql
CREATE OR REPLACE VIEW DEMOGRAPHICS_HTP_V
AS (SELECT AFFINITY_CARD, BOOKKEEPING_APPLICATION,
    BULK_PACK_DISKETTES, CUST_ID,EDUCATION, FLAT_PANEL_MONITOR,
    HOME_THEATER_PACKAGE, HOUSEHOLD_SIZE,OCCUPATION,
    OS_DOC_SET_KANJI, PRINTER_SUPPLIES, YRS_RESIDENCE,
    Y_BOX_GAMES
    FROM SH.SUPPLEMENTARY_DEMOGRAPHICS);

基于这个视图,将数据随机分为两部分:60%作为训练数据( N1_TRAIN_DATA 视图),40%作为测试数据( N1_TEST_DATA ):

CREATE OR REPLACE VIEW N1_TRAIN_DATA AS SELECT * FROM DEMOGRAPHICS_HTP_V SAMPLE (60) SEED (1);
CREATE OR REPLACE VIEW N1_TEST_DATA AS SELECT * FROM DEMOGRAPHICS_HTP_V MINUS SELECT * FROM N1_TRAIN_DATA;
4.2 预测属性重要性

使用 DBMS_PREDICTIVE_ANALYTICS 包中的 EXPLAIN 函数分析和创建属性重要性模型:

BEGIN
DBMS_PREDICTIVE_ANALYTICS.EXPLAIN(
  data_table_name        => 'DEMOGRAPHICS_HTP_V',
  explain_column_name    => 'HOME_THEATER_PACKAGE',
  result_table_name      => 'EXPLAN_RESULTS');
END;

可以通过以下查询列出前6个属性:

select * from ai_explain_output_HOME_THEATER_PACKAGE where rownum<7;
4.3 模型创建

可以通过执行以下PL/SQL脚本来创建一个机器学习模型:

%script
BEGIN
   DBMS_DATA_MINING.DROP_MODEL('HTP_CLASS_MODEL');
   EXCEPTION WHEN OTHERS THEN NULL;
END;
/
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE N1_BUILDING_SETTINGS
     (setting_name varchar2(30), setting_value varchar2(4000))';
  EXECUTE IMMEDIATE 'INSERT INTO N1_BUILDING_SETTINGS  values
     (''PREP_AUTO'', ''ON'')';
  EXECUTE IMMEDIATE 'INSERT INTO N1_BUILDING_SETTINGS  values
     (''ALGO_NAME'', ''ALGO_DECISION_TREE'')';
  DBMS_DATA_MINING.CREATE_MODEL(
       model_name      => 'HTP_CLASS_MODEL',
       mining_function => 'CLASSIFICATION',
       data_table_name  => 'N1_TRAIN_DATA',
       settings_table_name => 'N1_BUILDING_SETTINGS',
       case_id_column_name => 'CUST_ID',
       target_column_name => 'HOME_THEATER_PACKAGE');
END;

也可以使用 CREATE_MODEL2 过程创建模型,该过程允许在不创建输入表的持久表或视图的情况下创建模型:

%script
BEGIN DBMS_DATA_MINING.DROP_MODEL('HTP_CLASS_MODEL');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
    v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
    v_setlst('PREP_AUTO') := 'ON';
    v_setlst('ALGO_NAME') := 'ALGO_DECISION_TREE';
    DBMS_DATA_MINING.CREATE_MODEL2(
        model_name         => 'HTP_CLASS_MODEL',
        mining_function    => 'CLASSIFICATION',
        data_query         => 'SELECT * FROM DEMOGRAPHICS_HTP_V
                              SAMPLE (60) SEED (1)',
        set_list           => v_setlst,
        case_id_column_name => 'CUST_ID',
        target_column_name => 'HOME_THEATER_PACKAGE');
END;
4.4 模型测试和评估

模型创建完成后,可以将其应用于测试数据进行测试和评估:

BEGIN
  DBMS_DATA_MINING.APPLY('HTP_CLASS_MODEL','N1_TEST_DATA','CUST_ID', 'HTP_APPLY_RESULT');
  DBMS_DATA_MINING.COMPUTE_LIFT('HTP_APPLY_RESULT','N1_TEST_DATA', 'CUST_ID','HOME_THEATER_PACKAGE', 'N1_LIFT_TABLE', '1', 'PREDICTION', 'PROBABILITY',100);
END;

为了查看模型的提升结果,可以查询提升表 N1_LIFT_TABLE

SELECT QUANTILE_NUMBER, GAIN_CUMULATIVE FROM N1_LIFT_TABLE;

可以通过查询 HTP_APPLY_RESULT 表来查看模型评分结果:

SELECT CUST_ID, PREDICTION PRED, ROUND(PROBABILITY,3) PROBABILITY
FROM HTP_APPLY_RESULT WHERE PREDICTION = 1 AND PROBABILITY > 0.5

还可以将测试数据表 N1_TEST_DATA 和结果表 HTP_APPLY_RESULT 连接起来,获取预测会购买家庭影院套餐的客户的所有相关数据:

-- 此处可补充连接查询的具体代码

通过以上步骤,我们完成了一个完整的机器学习模型的构建、评估和应用过程。在实际应用中,可以根据具体需求对模型进行调整和优化,以提高模型的性能和准确性。

机器学习模型构建与应用全流程解析

5. 模型评估指标及可视化总结

在前面的示例中,我们使用了增益和提升图来评估模型的有效性。下面通过 mermaid 流程图来总结模型评估的整体流程:

graph LR
    A[创建模型] --> B[模型应用]
    B --> C[结果比较]
    C --> D[计算提升度]
    D --> E[查询提升表]
    E --> F[生成增益和提升图]

从这个流程图可以清晰地看到,模型评估是一个有序的过程。首先创建模型,然后将其应用于测试数据,接着进行结果比较,计算提升度,查询提升表,最后通过增益和提升图直观地展示模型的性能。

增益和提升图是评估分类模型性能的重要工具。在图中,提升曲线与基线之间的面积越大,说明模型的性能越好。这是因为该面积反映了模型预测比随机猜测的优势程度。

6. 模型应用的灵活性分析

在模型评分部分,我们介绍了使用 PREDICTION 函数和 DBMS_DATA_MINING.APPLY 过程进行模型应用。下面通过表格对比这两种方式的特点:

方法 优点 缺点 适用场景
PREDICTION 函数 语法灵活,可以使用 USING 子句指定预测因子,支持表达式作为预测因子 对于复杂的模型应用,代码可能会变得冗长 适用于需要灵活指定预测因子的场景,如只选择部分属性或使用表达式进行预测
DBMS_DATA_MINING.APPLY 过程 可以直接将模型应用于新数据并生成结果表,操作简单 灵活性相对较差,不能像 PREDICTION 函数那样灵活指定预测因子 适用于需要快速将模型应用于新数据并存储结果的场景

通过这个表格,我们可以根据具体的需求选择合适的模型应用方法。如果需要灵活控制预测因子,那么 PREDICTION 函数是更好的选择;如果只需要简单地将模型应用于新数据并存储结果, DBMS_DATA_MINING.APPLY 过程则更为合适。

7. 数据准备与预处理的重要性

在机器学习项目示例中,数据准备和预处理是非常重要的步骤。以下是数据准备和预处理的步骤列表:
1. 数据探索 :通过查询数据,了解目标数据的分布情况。例如,查询 SUPPLEMENTARY_DEMOGRAPHICS 表中 HOME_THEATER_PACKAGE 的分布,以及其他列按 HOME_THEATER_PACKAGE 分组的分布。
2. 数据可视化 :在 OML 笔记本中调整显示设置,将数据以图形的方式展示出来,更直观地了解数据的特征。
3. 视图创建 :创建视图 DEMOGRAPHICS_HTP_V ,从原始表中选择需要的列,方便后续的数据处理。
4. 数据划分 :将数据随机分为训练数据和测试数据,为模型的训练和评估做准备。

良好的数据准备和预处理可以提高模型的性能和准确性。例如,通过数据探索可以发现数据中的异常值和缺失值,及时进行处理;通过数据可视化可以更好地理解数据的特征,为特征选择和模型选择提供依据。

8. 模型创建与优化建议

在模型创建部分,我们介绍了使用 DBMS_DATA_MINING.CREATE_MODEL DBMS_DATA_MINING.CREATE_MODEL2 过程创建模型。以下是一些模型创建和优化的建议:
1. 算法选择 :根据问题的类型和数据的特点选择合适的算法。例如,对于分类问题,可以选择决策树算法;对于回归问题,可以选择线性回归算法。
2. 参数调整 :不同的算法有不同的参数,合理调整参数可以提高模型的性能。例如,在决策树算法中,可以调整树的深度、最小样本数等参数。
3. 特征选择 :选择对目标变量有重要影响的特征,可以减少模型的复杂度,提高模型的泛化能力。可以使用 DBMS_PREDICTIVE_ANALYTICS.EXPLAIN 函数分析属性的重要性,选择重要的属性作为特征。

通过以上建议,可以创建出性能更好的模型,并在实际应用中取得更好的效果。

9. 总结与展望

通过本文的介绍,我们详细了解了机器学习模型的构建、评估和应用的全流程。从模型创建到模型评估,再到模型评分和部署,每个步骤都有其重要性和相应的方法。

在实际应用中,我们可以根据具体的需求和数据特点,选择合适的方法和算法,不断优化模型,提高模型的性能和准确性。同时,随着机器学习技术的不断发展,我们可以探索更多的模型和方法,为解决实际问题提供更好的解决方案。

未来,机器学习将在更多的领域得到应用,如医疗、金融、交通等。我们需要不断学习和掌握新的技术,以适应不断变化的需求。希望本文能为读者在机器学习领域的学习和实践提供有益的参考。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值