20、SAS 数据处理与模型构建全解析

SAS 数据处理与模型构建全解析

1. CAS 数据类型与数据加载

1.1 Caslibs 介绍

Caslibs 是 CAS 服务器访问数据的关键途径,所有涉及数据的操作都依赖于它。可以把 Caslib 想象成一个容器,这个容器有两个数据引用区域:一个是包含源数据或文件的物理空间,另一个是为 CAS 操作处理提供数据的内存空间。访问控制与 Caslib 相关联,用于管理数据访问。授权用户可以使用 CASLIB 语句添加或管理 Caslib,其授权由管理员设置。在某些情况下,如复制非内存中的原生 CAS 表时,即使数据不复制到 Caslib,也需要指定 Caslib。

1.2 数据加载到 Caslib

可以将 SAS 数据集、数据库表等加载到 Caslib 中。DATA 步、CASUTIL 过程和 CAS 操作都可用于将数据加载到 CAS。数据加载到 Caslib 后,可以使用 DATA 步、过程、CAS 操作、PROC DS2 或 PROC FEDSQL 对 CAS 表进行操作。需要注意的是,表加载到 Caslib 时不会自动保存,可以使用 PROC CASUTIL 来保存表,原生 CAS 表的文件扩展名为 .sashdat。

1.3 支持的数据类型

CAS 服务器除了支持 SAS 传统的 CHARACTER 和 NUMERIC 数据类型外,还支持 VARCHAR、INT32、INT64 和 IMAGE 数据类型。
- VARCHAR 数据类型 :使用该类型创建的变量宽度可变,采用字符语义,与传统 CHARACTER 数据类型的固定宽度和字节语义不同。在 CAS 服务器的 DATA 步中使用 VARCHAR 数据类型有一些限制。
- INT32 和 INT64 数据类型 :使用这两种类型创建或加载的变量比传统 NUMERIC 数据类型支持更高的精度。在 CAS 引擎上进行的所有计算都保持 INT32 或 INT64 数据类型,而在 SAS 9 引擎上运行的 DATA 步或过程中的计算会转换为 NUMERIC 值。

以下是支持的变量数据类型表格:
| 数据类型 | CAS 操作 | CASL | 数据连接器 | 过程和 DATA 步 | DS2 | FedSQL | 工作区服务器 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| BIGINT | Y | Y | | | | | |
| BLOB | Y | | | | | | |
| BOOLEAN | Y | Y | | | | | |
| CHARACTER (CHAR) | Y | Y | Y | Y | Y | Y | Y |
| DATE | Y | Y | Y | | | | |
| DATETIME | Y | Y | | | | | |
| DOUBLE | Y | Y | Y | Y | Y | Y | Y |
| FLOAT | Y | Y | | | | | |
| IMAGE | Y | | | | | | |
| INTEGER | Y | Y | | | | | |
| INT32 | Y | Y | Y | | | | |
| INT64 | Y | Y | Y | | | | |
| ITEMS | Y | | | | | | |
| LISTS | Y | | | | | | |
| NCHAR | Y | Y | | | | | |
| NUMERIC (NUM) | Y | Y | | | | | |
| NVARCHAR | Y | Y | | | | | |
| SMALLINT | Y | Y | | | | | |
| STRING UTF - 8 | Y | | | | | | |
| TABLE | Y | | | | | | |
| TIME | Y | Y | Y | | | | |
| TIMESTAMP | Y | Y | | | | | |
| TINYINT | Y | Y | | | | | |
| VARCHAR | Y | Y | Y | Y | Y | Y | |

数据连接器还支持其他数据类型,这些数据类型会先转换为 CAS 服务器可以处理的数据类型。

2. 矩阵相关知识

2.1 矩阵的秩

矩阵的秩是矩阵中线性无关的行(或列)向量的最大数量。如果向量 r 不能表示为向量 r1 和 r2 的线性组合,则称 r 与 r1 和 r2 线性无关。例如:
- 矩阵 A 中,行 r2 是 r1 的倍数(r2 = 2 r1),所以它只有一个独立行,Rank(A) = 1。
- 矩阵 B 中,行 r3 是 r1 和 r2 的和(r3 = r1 + r2),但 r1 和 r2 是独立的,Rank(B) = 2。
- 矩阵 C 中,所有 3 行彼此独立,Rank(C) = 3。

2.2 矩阵的转置

矩阵的转置可以定义为一个操作符,它可以交换矩阵的行和列索引,即将矩阵沿对角线翻转。计算矩阵的转置,只需交换矩阵的行和列,即将行元素写为列,列元素写为行。

3. 杂质减少度量

3.1 分类目标的杂质减少度量

确定一组候选分割后,使用分割标准来确定最佳分割。在某些情况下,分割的价值很明显。如果子节点中的目标分布与父节点相同,则分割没有改进,是无价值的;相反,如果分割产生纯子节点,则该分割肯定是最佳的。在分类树中,三个最著名的分割标准基于基尼指数(BFOS 1984)、熵(Quinlan 1993)和卡方检验(Kass 1980)。与这三个分割标准相关的著名算法和软件产品有 CART(分类和回归树)、C5.0(由机器学习研究员 Quinlin 开发)和 CHAID 算法(卡方自动交互检测)。

3.2 区间目标的杂质减少度量

回归树试图将输入空间划分为目标值相似的段(即每个段或节点的变异性较低)。在纯节点中,所有目标值都相等,即目标的方差为零。分割搜索的考虑因素和 p 值调整与分类树相同,但合适的分割标准不同。回归树的默认分割标准是响应方差的变化,CHAID 和 F 统计量也可用作分割方法。

当目标分布连续时,样本方差是明显的杂质度量。F 检验可用于回归树,类似于卡方检验用于分类树。分割节点可以看作是单因素方差分析,其中 B 个分支是 B 个处理。F 统计量的大值表示偏离所有节点均值相等的原假设。当目标值在输入条件下独立、正态分布且方差恒定时,F 统计量遵循具有 B - 1 和 n - B 自由度的 F 分布。检验的 p 值的使用方式与分类树的卡方检验的 p 值相同。

以下是决策树分割搜索的 mermaid 流程图:

graph TD
    A[开始] --> B[选择输入]
    B --> C{输入是区间型?}
    C -- 是 --> D[每个唯一值作为潜在分割点]
    C -- 否 --> E[计算每个类别输入水平的目标平均值]
    D --> F[生成两个组]
    E --> F
    F --> G[形成 2x2 列联表]
    G --> H[计算 Pearson 卡方统计量]
    H --> I[转换为 p 值]
    I --> J[计算 logworth]
    J --> K{logworth 超过阈值?}
    K -- 是 --> L[记录最佳分割]
    K -- 否 --> M[排除该输入]
    L --> N[重复所有输入]
    N --> O[比较所有最佳分割的 logworth]
    O --> P[选择最高 logworth 的分割]
    P --> Q[划分训练数据]
    Q --> R[在每个叶子中继续分割搜索]
    R --> S{是否还有分割?}
    S -- 是 --> B
    S -- 否 --> T[结束]

4. 决策树分割搜索

4.1 分割搜索过程

决策树分割搜索从选择一个输入来划分可用的训练数据开始。如果所选输入的测量尺度是区间型,每个唯一值都作为数据的潜在分割点;如果输入是分类的,则计算每个分类输入水平内目标的平均值,这些平均值在后续讨论中起到与唯一区间输入值相同的作用。

对于选定的输入和固定的分割点,生成两个组。输入值小于分割点的情况向左分支,输入值大于分割点的情况向右分支。这些组与目标结果一起形成一个 2x2 列联表,列指定分支方向(左或右),行指定目标值(0 或 1)。使用 Pearson 卡方统计量来量化表中列计数的独立性。卡方统计量的大值表明左分支中 0 和 1 的比例与右分支不同,结果比例的较大差异表示良好的分割。

由于 Pearson 卡方统计量可应用于多路分割和多结果目标的情况,因此将该统计量转换为概率值(p 值)。p 值表示在每个分支方向上目标比例相同的假设下获得观察到的统计量值的可能性。对于大型数据集,这些 p 值可能非常接近零。因此,分割的质量通过 logworth = -log(卡方 p 值) 来报告。默认情况下,至少有一个 logworth 必须超过阈值(对应卡方 p 值为 0.20 或 logworth 约为 0.7)才能进行分割。

4.2 影响分割搜索的因素

  • 算法设置限制 :树算法设置不允许某些数据分区。例如,分割搜索所需的最小观察数和叶子中的最小观察数等设置,会强制分割分区中有最小数量的案例,从而减少了分割搜索中每个输入的潜在分区数量。
  • 多重比较问题 :在测试列联表中列类别的独立性时,即使分割分支之间的真实潜在比例没有差异,也可能获得显著(大)的卡方统计量值。随着可能的分割点数量增加,获得显著值的可能性也会增加。为了保持统计结果的整体置信度,统计人员会对每个测试的 p 值进行膨胀,这种 p 值调整称为 Bonferroni 校正。
  • 缺失值处理 :对于有缺失值的输入,会生成两组经过 Bonferroni 调整的 logworth。第一组将有缺失输入值的案例包含在列联表的左分支中并计算 logworth,第二组将缺失值案例移至右分支。然后从缺失值在左分支和右分支的可能分割集中选择最佳分割。

4.3 分割搜索的后续步骤

对训练数据中的每个输入重复分区过程,调整后的 logworth 未超过阈值的输入将被排除考虑。确定每个输入的最佳分割后,树算法会比较每个最佳分割对应的 logworth,logworth 最高的分割被认为是最佳分割。使用最佳分割规则对训练数据进行分区,分割搜索在每个叶子中继续进行。由于后续分割的显著性取决于先前分割的显著性,算法再次面临多重比较问题。为了补偿这个问题,算法会根据当前分割上方的分割数量增加阈值,对于二元分割,阈值增加量为 log10(2) d ≈ 0.3·d(d 是决策树上分割的深度),这称为深度调整。

数据根据最佳分割进行分区,创建第二个分区规则。这个过程在每个叶子中重复,直到没有调整后的 logworth 超过深度调整阈值的分割为止,这完成了树算法的分割搜索部分,得到的输入空间分区称为最大树。最大树的开发完全基于训练数据上分割价值的统计度量,它可能在独立的验证数据集上泛化效果不佳,最大树是优化模型复杂度的起点,优化树的复杂度通过剪枝来完成。

5. 模型构建实践

5.1 构建决策树

  • 操作步骤
    1. 在 Starter Template 管道上,右键单击变量选择节点,选择“添加子节点” -> “监督学习” -> “决策树”。
    2. 在属性窗格中,打开“执行自动调优”选项,默认属性显示决策树模型中每个属性尝试的起始值和范围。
    3. 右键单击决策树节点并选择“运行”,此过程可能需要几分钟。
    4. 执行完成后,右键单击决策树节点并选择“结果”。
    5. 检查结果窗口,最大化自动调优结果窗口,注意执行的不同评估,然后恢复窗口。
    6. 向下滚动并最大化输出窗口,此输出显示最终决策树模型选择的参数集。
    7. 单击评估选项卡,向下滚动并观察拟合统计窗口,自动调优模型在 VALIDATE 分区上的平均平方误差为 0.0573。
  • 冠军模型的标准
    • 分割标准:Gain
    • 剪枝方法:Cost Complexity
    • 最大分支数:2
    • 最大树深度:11
  • 与演示模型的比较 :自动调优的决策树比演示中构建的决策树表现更好。

5.2 构建梯度提升模型

  • 操作步骤
    1. 在 Starter Template 管道上,右键单击变量选择节点,选择“添加子节点” -> “监督学习” -> “梯度提升”。
    2. 在属性窗格中,打开“执行自动调优”选项,默认属性显示梯度提升模型中每个属性尝试的起始值和范围。
    3. 右键单击梯度提升节点并选择“运行”,此过程可能需要几分钟。
    4. 执行完成后,右键单击梯度提升节点并选择“结果”。
    5. 检查结果窗口,最大化自动调优结果窗口,注意执行的不同评估,然后恢复窗口。
    6. 向下滚动并最大化输出窗口,此输出显示最终梯度提升模型选择的参数集。
    7. 单击评估选项卡,向下滚动并观察拟合统计窗口,自动调优模型在 VALIDATE 分区上的平均平方误差为 0.0560。
  • 冠军模型的标准
    • 树的数量:150
    • 每次分割的变量数量:14
    • 箱的数量:50
    • 最大分支数:2
    • 最大深度:4
  • 与演示模型的比较 :课程演示中早期构建的梯度提升模型在平均平方误差上表现更好,但自动调优模型在其他拟合统计量(如 KS)上表现更好。

5.3 构建森林模型

  • 操作步骤
    1. 在 Starter Template 管道上,右键单击变量选择节点,选择“添加子节点” -> “监督学习” -> “森林”。
    2. 在属性窗格中,打开“执行自动调优”选项,默认属性显示森林模型中每个属性尝试的起始值和范围。
    3. 右键单击森林节点并选择“运行”,此过程可能需要几分钟。
    4. 执行完成后,右键单击森林节点并选择“结果”。
    5. 检查结果窗口,最大化自动调优结果窗口,注意执行的不同评估,然后恢复窗口。
    6. 向下滚动并最大化输出窗口,此输出显示最终森林模型选择的参数集。
    7. 单击评估选项卡,向下滚动并观察拟合统计窗口,自动调优模型在 VALIDATE 分区上的平均平方误差为 0.0577。
  • 冠军模型的标准
    • 树的数量:70
    • 每次分割的变量数量:2
    • 箱的数量:20
    • 最大分支数:2
    • 最大深度:29
  • 与演示模型的比较 :课程演示中构建的森林在平均平方误差(以及其他拟合统计量,如 KS)上略好于自动调优的森林。

5.4 构建支持向量机模型

  • 操作步骤
    1. 在 Lesson 5 管道上,右键单击变量选择节点,选择“添加子节点” -> “监督学习” -> “SVM”。
    2. 在属性窗格中,打开“执行自动调优”选项,默认属性显示 SVM 模型中每个属性尝试的起始值和范围。
    3. 在多项式次数下,将最大值范围从 3 更改为 2。
    4. 右键单击 SVM 节点并选择“运行”,此过程可能需要几分钟。
    5. 执行完成后,右键单击 SVM 节点并选择“结果”。
    6. 检查结果窗口,最大化自动调优结果窗口,注意执行的不同评估,然后恢复窗口。
    7. 向下滚动并最大化输出窗口,此输出显示最终 SVM 模型选择的参数集。

5.4 构建支持向量机模型(续)

通过上述步骤完成支持向量机模型的构建后,我们可以详细了解模型的表现和参数选择。自动调优过程会在给定的参数范围内进行搜索,找到最适合数据的参数组合。在这个例子中,我们对多项式次数的范围进行了调整,这可能会影响模型的复杂度和拟合能力。

以下是不同模型在自动调优后的表现对比表格:
| 模型类型 | 平均平方误差(VALIDATE 分区) | 冠军模型标准 |
| ---- | ---- | ---- |
| 决策树 | 0.0573 | 分割标准:Gain;剪枝方法:Cost Complexity;最大分支数:2;最大树深度:11 |
| 梯度提升 | 0.0560 | 树的数量:150;每次分割的变量数量:14;箱的数量:50;最大分支数:2;最大深度:4 |
| 森林 | 0.0577 | 树的数量:70;每次分割的变量数量:2;箱的数量:20;最大分支数:2;最大深度:29 |
| 支持向量机 | 待确定 | (根据自动调优结果确定具体参数) |

从这个表格中,我们可以直观地比较不同模型在平均平方误差上的表现,同时了解每个模型冠军标准的具体参数。这有助于我们选择最适合当前数据和问题的模型。

6. 模型选择与优化建议

6.1 基于性能指标的模型选择

在选择模型时,平均平方误差是一个重要的性能指标,但不是唯一的指标。我们还需要考虑其他因素,如模型的复杂度、训练时间、可解释性等。
- 决策树 :具有较好的可解释性,能够直观地展示决策过程。如果我们需要理解模型是如何做出决策的,决策树是一个不错的选择。在这个例子中,决策树的平均平方误差为 0.0573,表现相对稳定。
- 梯度提升 :通常在预测性能上表现较好,但模型复杂度较高,训练时间可能较长。如果我们更注重预测的准确性,并且有足够的计算资源和时间,梯度提升模型可能更适合。虽然在平均平方误差上略逊于决策树,但在其他拟合统计量(如 KS)上表现更好。
- 森林 :结合了多个决策树的结果,能够减少过拟合的风险,提高模型的稳定性。森林模型在平均平方误差上与决策树相近,但略逊一筹。
- 支持向量机 :适用于处理高维数据和非线性问题。通过调整核函数和参数,可以获得较好的性能。在这个例子中,我们对多项式次数进行了调整,可能会影响模型的表现,需要根据具体的自动调优结果来评估。

6.2 模型优化策略

  • 参数调优 :通过自动调优功能,我们可以在一定范围内搜索最佳的参数组合。但自动调优的范围可能有限,我们可以进一步手动调整参数,尝试不同的取值,以获得更好的性能。
  • 特征工程 :选择合适的特征对于模型的性能至关重要。我们可以对原始数据进行预处理,如特征选择、特征变换等,以提高模型的输入质量。
  • 模型融合 :将多个不同的模型进行融合,如集成学习中的投票法、堆叠法等,可以综合各个模型的优势,提高整体的预测性能。

7. 总结与展望

7.1 总结

本文详细介绍了 SAS 数据处理与模型构建的相关知识,包括 CAS 数据类型与数据加载、矩阵相关知识、杂质减少度量、决策树分割搜索以及模型构建实践等方面。通过实际操作步骤和案例分析,我们了解了如何使用 SAS 进行数据处理和模型构建,以及如何选择和优化模型。
- 在 CAS 数据处理方面,我们学习了 Caslibs 的概念和作用,以及如何将数据加载到 Caslib 中。同时,了解了 CAS 支持的各种数据类型及其特点。
- 在矩阵知识方面,掌握了矩阵的秩和转置的计算方法,这些知识在数据分析和模型构建中具有重要的应用。
- 在决策树分割搜索方面,深入了解了分割搜索的过程和影响因素,以及如何通过深度调整和 Bonferroni 校正来解决多重比较问题。
- 在模型构建实践方面,通过构建决策树、梯度提升、森林和支持向量机等模型,我们学会了如何使用自动调优功能来选择最佳的参数组合,并比较了不同模型的性能。

7.2 展望

随着数据量的不断增加和数据分析需求的不断提高,SAS 作为一种强大的数据分析工具,将在更多领域得到广泛应用。未来,我们可以进一步探索 SAS 的高级功能,如深度学习、时间序列分析等,以应对更加复杂的数据分析问题。同时,结合其他数据分析工具和技术,如 Python、R 等,可以发挥各自的优势,提高数据分析的效率和准确性。

以下是一个 mermaid 流程图,展示了从数据处理到模型选择和优化的整体流程:

graph LR
    A[数据准备] --> B[数据加载到 CAS]
    B --> C[数据类型处理]
    C --> D[特征工程]
    D --> E[模型选择]
    E --> F{模型类型}
    F -- 决策树 --> G[决策树构建与调优]
    F -- 梯度提升 --> H[梯度提升构建与调优]
    F -- 森林 --> I[森林构建与调优]
    F -- 支持向量机 --> J[支持向量机构建与调优]
    G --> K[模型评估]
    H --> K
    I --> K
    J --> K
    K --> L{性能是否满意?}
    L -- 是 --> M[模型应用]
    L -- 否 --> N[模型优化]
    N --> E

这个流程图清晰地展示了从数据准备到模型应用的整个过程,包括数据处理、模型选择、模型构建、模型评估和优化等环节。通过不断地迭代和优化,我们可以获得性能更好的模型,满足不同的数据分析需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值