ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

YDF高级特征指南:时序、多维、预训练嵌入特征喂给决策树的简单方法

YDF高级特征指南:时序、多维、预训练嵌入特征喂给决策树的简单方法 YDF高级特征指南时序、多维、预训练嵌入特征喂给决策树的简单方法【免费下载链接】yggdrasil-decision-forestsA library to train, evaluate, interpret, and productionize decision forest models such as Random Forest and Gradient Boosted Decision Trees.项目地址: https://gitcode.com/gh_mirrors/yg/yggdrasil-decision-forestsYDFYggdrasil Decision Forests是一个开源决策森林库用于训练、评估、解释和部署随机森林Random Forest与梯度提升树GBDT模型。本文是一份面向新手的完整指南讲清楚如何把三类高级特征——时序事件流、多维向量、预训练模型产出的嵌入向量——用简单的方式喂给决策树而不必自己造轮子。为什么决策树也能吃高级特征很多人觉得决策树只适合干净的表格数据。实际上YDF 通过特征语义Feature Semantic机制来解决这个问题训练时 YDF 会自动识别每个特征的类型数值、类别、布尔、类别集合、离散化数值并据此选择最优的分裂方式。NUMERICAL数值按阈值分裂例如age 30CATEGORICAL类别按值集合分裂例如country in {USA, DE}无需 one-hotBOOLEAN布尔内存和速度优化过的特化语义CATEGORICAL_SET类别集合按集合交集分裂适合标签组、分词后的文本DISCRETIZED_NUMERICAL离散化数值加速训练约 2 倍的数值语义这意味着只要你能把数据表示成每个样本一行、每列一个特征YDF 就能训练。下面三类高级特征正好都落在这张表里。时序特征别喂原始时间戳要喂统计特征 典型场景银行交易流水、销售日志、网络日志、病人体征——每一条记录是一个带时间戳的事件事件之间采样并不均匀。关键原则来自官方 guide_feature_semantics.md时间戳 → 日历特征直接转成 Unix 时间戳效果很差应拆成星期几、月份中的第几周、一天中的几点这类日历特征。事件流 → 滑动窗口统计围绕客户/终端等 ID计算过去 1 天/1 周/4 周内的交易次数、金额总和、欺诈次数等。官方教程 time_sequences.ipynb 给出了完整演示用信用卡交易数据集识别欺诈把过去 4 周内同一终端的欺诈次数等窗口特征算好后喂给 YDF。模型解释时可以看到per_terminal.moving_sum_frauds终端级滑动欺诈求和是最重要的特征而星期几几乎不重要——这正是时序特征工程的正确打开方式。对于复杂时序问题官方建议使用 Time sequences 教程 中集成的 Temporian 时序预处理库它能自动保证只用过去的数据避免未来数据泄漏。多维特征一个向量自动展开成多个特征 典型场景图像像素、传感器多通道读数、任何定长向量。YDF 原生支持定长向量作为特征把一个(N, D)的 NumPy 数组直接放进数据集字典即可。YDF 会把向量的每个维度展开unroll成一个独立特征自动命名为feature.0_of_D、feature.1_of_D这样的格式例如categorical_vector.0_of_2。两个注意点所有样本的向量长度必须一致定长向量。如果长度不定请改用 CATEGORICAL_SET 语义。类别型向量同样支持展开后每个维度都是独立的 CATEGORICAL 特征。更多细节见官方教程 multidimensional_feature.ipynb。预训练嵌入向量文本/图像编码器输出直接可用 这是多维特征最经典的用法先用预训练模型如 Universal Sentence Encoder把一段文本编码成 512 维数值向量然后把这 512 维向量作为一列直接喂给 YDF。流程非常简单离线推理用预训练编码器给每条样本生成嵌入向量这一步在 YDF 之外完成。直接训练嵌入向量作为多维 NUMERICAL 特征进入随机森林/GBDT512 维会被展开成text.0_of_512…text.511_of_512。决策森林在稀疏、噪声大的表格化数据上表现稳定与预训练编码器结合后既能继承深度模型的语义能力又保留树模型的可解释性和低推理成本。官方 multidimensional_feature.ipynb 教程中就用嵌入类特征做了演示并通过模型描述describe()查看每棵树的分裂结构。⚠️ 注意原始图像像素这类视觉原始输入并不适合决策森林官方建议这类场景优先用神经网络但编码器产出的紧凑嵌入向量是决策森林的强项。变长标签/分词文本用 CATEGORICAL_SET 语义 典型场景网页标签{politics, elections}、商品 tag 集合、分词后的文本。与定长向量相反变长的类别值序列要用ydf.Semantic.CATEGORICAL_SET语义YDF 按集合交集来分裂例如文本词集是否包含 {cat, dog}。使用建议别用 CATEGORICAL_SET 代替 CATEGORICAL结果相同但训练更慢。文本要先分词按空格切分对英文尚可中文请换更专业的分词器可用双词bi-gram保留部分位置信息。读取 CSV 时CATEGORICAL_SET 列会自动按空格分词详见 dataset_formats.md。三个常见坑帮你少走弯路 ⚠️常见做法正确做法对类别特征做 one-hot 编码直接喂 CATEGORICAL树模型天然支持集合分裂把数值特征分桶0-5, 5-10…尽量直接喂原始数值分桶会损失信息保留 ID / unique_hash 列训练前删除会拖慢训练并增大模型时间戳直接转 Unix 秒数拆成日历特征 滑动窗口统计特征另外YDF 会自动把罕见类别值替换为 OODout-of-dictionary以防过拟合由超参数max_vocab_count和min_vocab_frequency控制缺失值也会按语义自动插补数值取均值、类别取众数你不需要自己填充缺失值。训练之后评估与解释一步到位训练完成后model.evaluate()会自动生成 ROC、精确率-召回率、阈值-准确率、阈值-样本量四类曲线如图所示方便你挑业务阈值。model.describe()则给出特征重要性、每棵树的分裂结构等解释信息——即使你的特征是嵌入向量或时序统计量模型依然是可解释的树这也是决策森林用于风控、信贷等场景的核心价值。快速上手三步喂入高级特征安装pip install ydf准备数据把时序统计特征、多维向量、嵌入向量组织成字典 of NumPy 数组小数据或 Avro 文件大数据、分布式训练格式说明见 dataset_formats.md。训练并查看语义调用ydf.RandomForestLearner(labellabel).train(ds)再用model.describe()检查Dataspec页确认每个特征的语义是否符合预期。语义定义与完整类型转换规则请参考 guide_feature_semantics.md。按照上面的方法时序、多维向量和预训练嵌入这些高级特征喂给决策树其实只需要几行代码的距离 【免费下载链接】yggdrasil-decision-forestsA library to train, evaluate, interpret, and productionize decision forest models such as Random Forest and Gradient Boosted Decision Trees.项目地址: https://gitcode.com/gh_mirrors/yg/yggdrasil-decision-forests创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表