特征工程智能体先做什么?把数值和类别预处理封装成可验证工具

开发特征工程智能体时,可以先把确定的预处理任务封装成普通 Python 工具,再考虑让模型选择何时调用。工具应明确接受哪些列、只用训练样本拟合,并返回特征名称与形状。下面做一个固定输入契约的本地预览函数,不让模型自由修改列规则。

开发特征工程智能体时,可以先把确定的预处理任务封装成普通 Python 工具,再考虑让模型选择何时调用。工具应明确接受哪些列、只用训练样本拟合,并返回特征名称与形状。下面做一个固定输入契约的本地预览函数,不让模型自由修改列规则。

环境与运行方法

本文代码在 Windows、Python 3.11 的本地独立环境执行通过。以下数据全部为人为构造的教学样本,不是客户数据,也不是业务效果测试。

特征工程智能体先做什么?把数值和类别预处理封装成可验证工具

新建一个空目录,在终端执行安装命令,把后面的完整代码保存为 demo.py,再执行 python demo.py。文件输出均保存在运行目录,请先在空目录练习。

python -m pip install numpy==2.4.6 pandas==3.0.6 scikit-learn==1.9.1

把工具边界写进函数

输入只允许 age 数值列和 city 类别列,函数先核对列集合,再处理缺失和未见类别。数值列用训练集的中位数填补;城市列通过 OneHotEncoder 编码,handle_unknown=ignore 使未见类别变成全零类别块。

工具输出只报告行数、特征名和一条教学变换结果,没有接触目标标签或执行模型训练。schema、允许列和输出格式保持固定,可作为智能体工具调用的前置契约;本文没有搭建完整智能体或运行远端模型。

输出检查比“工具调用成功”更具体

ColumnTransformer 分别选择两列,remainder=drop 不把额外原始列直接带入结果。即便如此,函数仍先拒绝额外列,防止误把标签或标识字段悄悄忽略后假装输入正确。

真实工具还应限制数据大小、核对权限、记录拟合材料和预处理版本。不要让模型在预测请求中重新拟合编码器;应复用训练期的同一对象,正式输出矩阵与字段顺序也要保存。

可复制的完整代码

import numpy as np
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
def prepare_feature_preview(train, query):
    allowed = {"age", "city"}
    if set(train.columns) != allowed or set(query.columns) != allowed:
        raise ValueError("columns_must_be_age_and_city")
    processor = ColumnTransformer([
        ("num", SimpleImputer(strategy="median"), ["age"]),
        ("cat", OneHotEncoder(handle_unknown="ignore", sparse_output=False), ["city"])
    ], remainder="drop")
    processor.fit(train)
    transformed = processor.transform(query)
    return {"rows": len(query), "feature_names": processor.get_feature_names_out().tolist(),
            "values": transformed.tolist()}
train = pd.DataFrame({"age": [20., 30., np.nan], "city": ["A", "B", "A"]})
query = pd.DataFrame({"age": [np.nan], "city": ["C"]})
result = prepare_feature_preview(train, query)
print(result)
assert result["values"] == [[25., 0., 0.]]
try:
    prepare_feature_preview(train, query.assign(label=1))
except ValueError as exc:
    print("extra_column_rejected", str(exc))
else:
    raise AssertionError("unexpected extra column accepted")

运行结果与核对方法

下面是本文教学代码在上述本地环境中的实际输出。浮点数末位可能随依赖版本变化。

{'rows': 1, 'feature_names': ['num__age', 'cat__city_A', 'cat__city_B'], 'values': [[25.0, 0.0, 0.0]]}
extra_column_rejected columns_must_be_age_and_city

核对 values 为 [[25.0,0.0,0.0]]:年龄来自训练集20和30的中位数,未见城市C的类别块为零。feature_names 与三列顺序一致,添加 label 的请求明确被拒绝。先让这种本地工具通过契约检查,再设计智能体调用与结果回填。

使用边界与常见问题

本例只有三条教学训练记录和一条查询,只实现受限特征预览,没有运行智能体。缺失城市、数值错类型和规模控制还需要扩展验证,不能把它当作任意表格的通用特征工程服务。

未见城市编码成全零是不是说明没有城市?

不是。它表示该类别没有进入训练词表,可能与缺失含义混淆。真实任务应另设未知类别指示或监测规则,并评估对预测的影响。

官方资料

接口与参数依据以下官方资料核对(2026年10月1日)。示例验证只覆盖本文输入和步骤。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30773.html

赞 (0)
AI小管家的头像AI小管家
回归模型的残差怎么检查?画预测值与残差图定位未建模模式
上一篇 1天前
电商 AI 分析怎么找商品搭配?计算购物篮支持度、置信度与提升度
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部