feature-selection - Vowpal Wabbit 交互冗余

标签 feature-selection redundancy quadratic vowpalwabbit

我很好奇大众似乎通过 -q 参数创建交互项的方式。

为了这个插图的目的,我使用了这个玩具数据,它被称为cats.vm:

1 |a black |b small  green |c numvar1:1.62 numvar2:342 |d cat |e numvar3:554
1 |a white |b large yellow |c numvar1:1.212 numvar2:562 |d cat |e numvar3:632
-1 |a black |b small green |c numvar1:12.03 numvar2:321 |d hamster |e numvar3:754
1 |a white |b large green |c numvar1:5.8 numvar2:782 |d dog |e numvar3:234
-1 |a black |b small yellow |c numvar1:2.322 numvar2:488 |d dog |e numvar3:265
1 |a black |b large yellow |c numvar1:3.99 numvar2:882 |d hamster |e numvar3:543

大众创建交互术语的方式似乎有些不一致。以下是几个示例,其中命令始终如下,仅更改了 -q:
vw -d cats.vm --loss_function logistic --invert_hash readable.cat.mod -q X

1. -q aa

在这里,我们在一个只有一个特征的命名空间中进行了交互,并且只能按预期获得黑色和白色(黑色 ^ 2 和白色 ^ 2)的二次项。
Constant:116060:0.082801
a^black:53863:-0.039097
a^black^a^black:247346:-0.039097
a^white:55134:0.223999
a^white^a^white:227140:0.223999
b^green:114666:0.027346
b^large:192199:0.330261
b^small:80587:-0.096200
b^yellow:255950:0.075754
c^numvar1:132428:0.004266
c^numvar2:30074:0.000211
d^cat:11261:0.188487
d^dog:173570:0.006734
d^hamster:247835:-0.085219
e^numvar3:12042:0.000115

2. -q ab

通过 2 个命名空间(其中一个具有 1 个以上的特征)之间的交互,除了 a 或 b 中没有项目的二次项(例如 black*black)外,一切都符合预期

问题 1:有没有办法强制这些“跨命名空间交互”包含多项式项,例如 black*black?
Constant:116060:0.079621
a^black:53863:-0.035646
a^black^b^green:46005:-0.017797
a^black^b^large:123538:0.137239
a^black^b^small:11926:-0.088733
a^black^b^yellow:187289:-0.053135
a^white:55134:0.206693
a^white^b^green:24528:0.127449
a^white^b^large:102061:0.206693
a^white^b^yellow:165812:0.114003
b^green:114666:0.025218
b^large:192199:0.302959
b^small:80587:-0.088733
b^yellow:255950:0.072339
c^numvar1:132428:0.004038
c^numvar2:30074:0.000199
d^cat:11261:0.176863
d^dog:173570:0.007334
d^hamster:247835:-0.080986
e^numvar3:12042:0.000109

3. -q bb

在这里,我们在有两个功能的命名空间内进行交互。有重复(例如 b^large^b^green:81557:0.112864 和 b^green^b^large:110857:0.112864)。

问题 2:这些是模型中的重复项还是 --invert_hash 中的一些问题?所有重复项的权重都相同。例如,我们是否应该将 green*large 权重乘以 2,以获得绿色和大交互的完整效果?
Constant:116060:0.062784
a^black:53863:-0.043486
a^white:55134:0.182450
b^green:114666:0.023035
b^green^b^green:33324:0.023035
b^green^b^large:110857:0.112864
b^green^b^small:261389:-0.016840
b^large:192199:0.252576
b^large^b^green:81557:0.112864
b^large^b^large:159090:0.252576
b^large^b^yellow:222841:0.187498
b^small:80587:-0.079945
b^small^b^green:249481:-0.016840
b^small^b^small:215402:-0.079945
b^small^b^yellow:128621:-0.123284
b^yellow:255950:0.051017
b^yellow^b^large:68957:0.187498
b^yellow^b^small:219489:-0.123284
b^yellow^b^yellow:132708:0.051017
c^numvar1:132428:0.003217
c^numvar2:30074:0.000164
d^cat:11261:0.158140
d^dog:173570:0.008735
d^hamster:247835:-0.085383
e^numvar3:12042:0.000086

最佳答案

一、基础知识:当你跨越特征时,vovpal wabbit 使用:

  • 对于交叉特征名称/身份:连接的原始特征名称(字符串)的 murmur32 哈希(模权重向量大小)
  • 对于交叉特征值:原始特征值(权重)的交叉(乘法)

  • 所以看看你上面的问题#3:连接的名字是b^green^b^largeb^large^b^green .它们具有相同的值:0.112864,因为两个特征值的乘积是相同的。然而,由于有两种可能的连接方式,我们得到了两个不同的哈希值和一个“拆分”功能。这种冗余(具有转置顺序)特征对现象似乎只出现在自交叉中。我不确定为什么,这可能是一个错误。

    回答其他问题(1 和 2):

    给力black^black (实际上是 ^a^black^a^black )你需要通过 -q aa因为 black仅在 namespace a .

    请注意,您可以传递多个 -q vw 的参数实现您想要的任何穿越:
    -q aa -q ab -q ...
    您可以使用通配符 :命名空间将每个命名空间相互交叉:
    -q ::
    获得更多权力:

    还有一个--cubic选项,允许您拟合三次多项式。 --cubic将 3 个命名空间前导字符作为参数,例如--cubic abc .

    最后,您也可以使用 --keep--ignore保留或忽略以某个字符开头的命名空间。

    关于feature-selection - Vowpal Wabbit 交互冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25985703/

    相关文章:

    python - 如何使用 scikit-learn PCA 进行特征缩减并知道哪些特征被丢弃

    c++ - 如何减少当前序列化所需的样板

    c++ - 如何从多重 map 中删除项目

    database - 数据库 : What are the options? 的地理冗余

    python - 在 SciKit-Learn 中同时使用递归特征消除和网格搜索

    python-3.x - 我该如何解决这个未知的标签类型错误?

    machine-learning - 特征重要性 - Bagging、scikit-learn

    c - 为什么这段计算二次方程解的代码不起作用?

    java - 二次方程求解器无法在 Java 中获得结果

    python 子类