gpt4 book ai didi

vowpalwabbit - Vowpal Wabbit 如何表示分类特征

转载 作者:行者123 更新时间:2023-12-03 23:26:13 24 4
gpt4 key购买 nike

我有以下所有分类变量的数据:

    class  education    income    social_standing
1 basic low good
0 low high V_good
1 high low not_good
0 v_high high good

这里的教育有四个级别(基本、低、高和 v_high)。收入有低和高两个层次;和social_standing 有三个级别(good、v_good 和not_good)。

就我对将上述数据转换为 VW 格式的理解而言,它会是这样的:
    1 |person education_basic income_low social_standing_good
0 |person education_low income_high social_standing_v_good
1 |person education_high income_low social_standing_not_good
0 |person education_v_high income_high social_standing_good

这里,'person' 是命名空间,所有其他都是特征值,以各自的特征名称为前缀。我对么?不知何故,这种特征值的表示让我很困惑。有没有其他方法来表示特征?应感谢帮助。

最佳答案

是的,你是对的。

这种表示肯定适用于 vawpal wabbit,但在某些情况下, 5 月 不是最佳的(这取决于)。

代表未订购 ,分类变量(具有离散值),标准的元宝 wabbit 技巧是为每个可能的(名称,值)组合使用逻辑/ bool 值(例如 person_is_good, color_blue, color_red )。这样做的原因是 vw隐式假定值为 1缺少值的地方。 color_red, color=red 之间没有实际区别, color_is_red ,甚至 (color,red)color_red:1除了内存中的哈希位置。不能在变量名中使用的唯一字符是特殊分隔符( :| )和空格。

Terminology note: this trick of converting each (feature + value) pair into a separate feature is sometimes called "One Hot Encoding".



但在这种情况下,变量值可能不是“严格分类的”。他们可能是:
  • 严格订购 , 例如 ( low < basic < high < v_high )
  • 大概有一个单调关系使用您尝试预测的标签

  • 因此,通过使它们“严格分类”(我的术语是具有离散范围的变量,它不具有上述两个属性),您可能会丢失一些可能有助于学习的信息。

    在您的特定情况下,您可以通过将值转换为数字来获得更好的结果,例如( 1, 2, 3, 4 ) 用于教育。即你可以使用类似的东西:
    1 |person education:2 income:1 social_standing:2
    0 |person education:1 income:2 social_standing:3
    1 |person education:3 income:1 social_standing:1
    0 |person education:4 income:2 social_standing:2

    问题中的训练集应该可以正常工作,因为即使像您一样将所有离散变量转换为 bool 变量, vw应该从数据本身发现带有标签的排序和单调性,只要上面的两个属性都为真,并且有足够的数据来推断它们。

    这是用于在 vawpal wabbit 中编码变量的简短备忘单:
    Variable type       How to encode                readable example
    ------------- ------------- ----------------
    boolean only encode the true case is_alive
    categorical append value to name color=green
    ordinal+monotonic :approx_value education:2
    numeric :actual_value height:1.85

    最后说明:
  • vw所有变量都是数字。编码技巧只是实用的制作方法 出现 categoricalboolean . bool 变量只是数字 0 或 1;分类变量可以编码为 bool 值:名称+值:1。
  • 任何值与标签不单调的变量在数字编码时可能不太有用。
  • 任何与标签不是线性相关的变量都可能受益于训练前的非线性变换。
  • 任何具有零值的变量都不会对模型产生影响(异常(exception):使用 --initial_weight <value> 选项时),因此可以将其从训练集
  • 中删除
  • 解析特征时,只有 :被认为是一个特殊的分隔符(变量名和它的数值之间)任何其他被认为是名称的一部分,整个名称字符串被散列到内存中的某个位置。一个失踪:<value>部分暗示 :1

  • 编辑: namespace 怎么样?

    命名空间被添加到具有特殊字符分隔符的特征名称之前,因此它们将相同的特征映射到不同的哈希位置。例子:
    |E low |I low

    本质上等同于(无 namespace 平面示例):
    |  E^low:1 I^low:1

    namespace 的主要用途是轻松地将 namespace 的所有成员重新定义为其他内容,忽略功能的完整 namespace , namespace 的功能与另一个交叉等(参见 -q--cubic--redefine--ignore--keep 选项)。

    关于vowpalwabbit - Vowpal Wabbit 如何表示分类特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640837/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com