【问题标题】:Train an estimator with text features训练具有文本特征的估计器
【发布时间】:2018-01-02 08:25:01
【问题描述】:

我有一个这样的标记训练数据集

X = [tag, design_version, runtime, error_msg], Y = 'PASS'/'FAIL'
'tag' = string
'design_version' = string
'runtime' = number
'error_msg' = string

还有更多我可以访问的功能(字符串、数字),但为简洁起见,这里没有列出。数据实际上是模拟的一组属性,标签是模拟是通过还是失败。我想用这些输入训练一个估计器;并使其预测一组新属性的“PASS”或“FAIL”。

我一直在阅读Working with Text Data with sklearn。但并不清楚如何使用文本和数字特征的组合来拟合估计器。使用什么算法等等。

任何指针都会很有帮助!

【问题讨论】:

    标签: scikit-learn classification supervised-learning


    【解决方案1】:

    您必须将字符串类型的数据转换为数字。有不同的方法,如单热编码、标签编码、tf-idf 等。这些方法取决于您的数据如何工作,但首先您可以对 Y 值进行二值化,因此如果通过它的 1 并且如果您失败它是 0。

    【讨论】:

    • 对于某些属性,编码方案很容易实现。但是它不是一个可以用于数学计算的连续数字。我的意思是,房屋面积是一个连续值(面积越大,它增加的权重越大);但是编码值不能直接与数字上的标签相关,对吗?我可以将我的标签编码为 0、1、2(比如说)。但这并不表示“随着标签数量的增加,更多标签被视为失败”或其他什么。
    • 对某些属性,标称属性可以标注。如果您已经有连续的值,请像这样离开它们。您需要将标称属性更改为可以训练模型的序数。
    • “将名义属性更改为序数” - 这是什么意思?我正在考虑使用 k-NN 方法。由于 k-NN 查看特征之间的距离,因此我可以对字符串属性使用字符串距离度量。如果这样可行,我什至不需要将字符串特征转换为数字等等。
    • 这个想法是你需要一个特征向量。这个向量只有数字。您需要选择对模型有用的属性,因为并非所有属性都有用。将名词性更改为序数是将“True”和“False”之类的内容更改为 1 和 0。您可以为每个类指定一个数字。对于其他功能,您必须评估如何进行此转换。
    • 感谢佛朗哥的意见!
    【解决方案2】:

    scikit-learn 提供了一个很好的实用程序类FeatureUnion,它允许组合几种特征提取方法(即连接它们产生的特征向量)。有一个 tutorial 关于如何组合不同的特征类型。基本上,你可以这样做:

    fe = FeatureUnion([
        ('tag', Pipeline([
            ('selector', ItemSelector(key='tag')),
            ('tfidf', TfidfVectorizer(ngram_range=(3,5), analyzer='char'))),
        ])),
        ('runtime',  # ...transformer for runtime feature
        # ... etc
    ])
    

    (ItemSelector 是教程中定义的自定义类)。

    【讨论】:

    • 这正是我希望找到的!虽然我可能需要一段时间才能真正尝试一下并让它发挥作用,但我很确定这就是我所需要的。非常感谢!
    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 2019-01-15
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多