【问题标题】:Custom Features using scikit-learn使用 scikit-learn 的自定义功能
【发布时间】:2014-05-01 19:41:47
【问题描述】:

我正在做一个对短文本进行分类的项目。 我的一个要求是对短文本进行矢量化处理,我想添加额外的特征,如文本长度、url 的数量等作为每个输入的特征。

scikit-learn 是否支持? 链接到任何示例笔记本或视频非常有帮助。

谢谢, 罗密特。

【问题讨论】:

    标签: machine-learning classification scikit-learn


    【解决方案1】:

    您可以使用 FeatureUnion 类将不同转换器提取的特征(例如,提取词袋 (BoW) 特征的特征与提取其他统计数据的特征)结合起来。

    这些特征的归一化以及相对于不同 BoW 特征数量的少量可能是有问题的。这是否是问题取决于下游训练的模型所做的假设以及特定的数据和目标任务。

    【讨论】:

    • 归一化仍然可以通过 TfidfVectorizer(norm='l2')make_pipeline(DictVectorizer(sparse=False), StandardScaler()) 的联合来执行(在 scikit-learn 0.15 语法中)。虽然对于非负特征,联合后的 L2 归一化也应该没问题。
    【解决方案2】:

    我没有使用 FeatureUnion 类。然而,我的方法更简单,更直接。从您的自定义管道中提取特征并将其附加到您从 scikit-learn 管道中提取的内容中。这只不过是在 numpy/scipy 中附加数组。

    注意事项: a) 您必须记住从您的自定义管道中提取的特征 ID 是什么。这将帮助您附加数组,而不会混淆。 b)您必须对自定义管道功能进行规范化(根据需要)。

    解决方案: 编写一个自定义特征提取器类。将特征提取、归一化等功能封装到其中。

    【讨论】:

    • 手动特征堆叠是可能的,但是通过交叉验证正确评估完整模型并使用网格搜索进行参数调整是很痛苦的。 FeatureUnion 类的行为类似于常规转换器,因此可用于 scikit-learn 管道中进行交叉验证和网格搜索。
    猜你喜欢
    • 2014-08-09
    • 2018-09-22
    • 2018-02-22
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2014-03-02
    相关资源
    最近更新 更多