【问题标题】:Reversing scaled values in LibSVM在 LibSVM 中反转缩放值
【发布时间】:2013-06-19 02:36:04
【问题描述】:

我在 LibSVM 中使用支持向量回归进行预测。我全部工作。但是有一个问题一直萦绕在我的脑海中。

对于 LibSVM,我首先在同一范围内缩放我的训练和测试集,然后选择最佳参数。在我运行 svm-train 和 svm-predict 之后,我以缩放格式获得了测试集的预测值。我正在使用 Excel 并反转缩放并计算平均绝对百分比误差 (MAPE)。

我很确定 LibSVM 中的缩放就像从最小值中减去该值,然后除以特定功能的范围。但是,我想看看我手动缩放的值和 LibSVM 缩放的值是否相同。在我将数据集分成两组之前,我在特征中找到最小值和最大值,然后按照我上面所说的方式进行缩放。然而,LibSVM 给出的训练和测试集的缩放值与我手动计算的并不完全相同。他们只是大致接近。有谁知道他们为什么不一样?

另一个问题是:如何在 LibSVM 中计算 MAPE?

【问题讨论】:

    标签: scale libsvm


    【解决方案1】:

    如果您检查文件 svm-scale.c,您会发现缩放数据的公式是:

    value = y_lower + (y_upper-y_lower) * (value - y_min)/(y_max-y_min);
    

    其中y_lower y_uppery 缩放限制

    因此,您可以看到缩放值没有像您假设的那样计算出来“从最小值中减去该值,然后除以特定特征的范围”。如果你想恢复真正的价值,你只需要撤消公式。

    示例:

    如果您以 libSVM 站点中提供的众多数据集之一为例,例如:covtype dataset,然后打开它,您将看到这样一个文件:

    1 1:2596 2:51 3:3 4:258 6:510 7:221 8:232 9:148 10:6279 11:1 43:1
    1 1:2590 2:56 3:2 4:212 5:-6 6:390 7:220 8:235 9:151 10:6225 11:1 43:1
    2 1:2804 2:139 3:9 4:268 5:65 6:3180 7:234 8:238 9:135 10:6121 11:1 26:1
    2 1:2785 2:155 3:18 4:242 5:118 6:3090 7:238 8:238 9:122 10:6211 11:1 44:1
    1 1:2595 2:45 3:2 4:153 5:-1 6:391 7:220 8:234 9:150 10:6172 11:1 43:1
    ...
    

    现在让我们使用:

    ./svm-scale -s covtype.libsvm.binary.range  covtype.libsvm.binary > covtype.libsvm.binary.scale
    

    这将生成两个文件,.range 文件将包含与缩放过程相关的所有信息(每列的最大值和最小值),以及作为输出的 .scale 文件,如下所示:

    1 1:-0.262631 2:-0.716667 3:-0.909091 4:-0.630637 5:-0.552972 6:-0.856681 7:0.740157 8:0.826772 9:0.165354 10:0.750732 11:1 12:-1 13:-1 14:-1 15:-1 16:-1 17:-1 18:-1 19:-1 20:-1 21:-1 22:-1 23:-1 24:-1 25:-1 26:-1 27:-1 28:-1 29:-1 30:-1 31:-1 32:-1 33:-1 34:-1 35:-1 36:-1 37:-1 38:-1 39:-1 40:-1 41:-1 42:-1 43:1 44:-1 45:-1 46:-1 47:-1 48:-1 49:-1 50:-1 51:-1 52:-1 53:-1 54:-1 
    1 1:-0.268634 2:-0.688889 3:-0.939394 4:-0.696492 5:-0.568475 6:-0.890403 7:0.732283 8:0.850394 9:0.188976 10:0.735675 11:1 12:-1 13:-1 14:-1 15:-1 16:-1 17:-1 18:-1 19:-1 20:-1 21:-1 22:-1 23:-1 24:-1 25:-1 26:-1 27:-1 28:-1 29:-1 30:-1 31:-1 32:-1 33:-1 34:-1 35:-1 36:-1 37:-1 38:-1 39:-1 40:-1 41:-1 42:-1 43:1 44:-1 45:-1 46:-1 47:-1 48:-1 49:-1 50:-1 51:-1 52:-1 53:-1 54:-1 
    2 1:-0.0545273 2:-0.227778 3:-0.727273 4:-0.616321 5:-0.385013 6:-0.106365 7:0.84252 8:0.874016 9:0.0629921 10:0.706678 11:1 12:-1 13:-1 14:-1 15:-1 16:-1 17:-1 18:-1 19:-1 20:-1 21:-1 22:-1 23:-1 24:-1 25:-1 26:1 27:-1 28:-1 29:-1 30:-1 31:-1 32:-1 33:-1 34:-1 35:-1 36:-1 37:-1 38:-1 39:-1 40:-1 41:-1 42:-1 43:-1 44:-1 45:-1 46:-1 47:-1 48:-1 49:-1 50:-1 51:-1 52:-1 53:-1 54:-1 
    2 1:-0.0735368 2:-0.138889 3:-0.454545 4:-0.653543 5:-0.248062 6:-0.131657 7:0.874016 8:0.874016 9:-0.0393701 10:0.731772 11:1 12:-1 13:-1 14:-1 15:-1 16:-1 17:-1 18:-1 19:-1 20:-1 21:-1 22:-1 23:-1 24:-1 25:-1 26:-1 27:-1 28:-1 29:-1 30:-1 31:-1 32:-1 33:-1 34:-1 35:-1 36:-1 37:-1 38:-1 39:-1 40:-1 41:-1 42:-1 43:-1 44:1 45:-1 46:-1 47:-1 48:-1 49:-1 50:-1 51:-1 52:-1 53:-1 54:-1 
    1 1:-0.263632 2:-0.75 3:-0.939394 4:-0.780959 5:-0.555556 6:-0.890122 7:0.732283 8:0.84252 9:0.181102 10:0.720898 11:1 12:-1 13:-1 14:-1 15:-1 16:-1 17:-1 18:-1 19:-1 20:-1 21:-1 22:-1 23:-1 24:-1 25:-1 26:-1 27:-1 28:-1 29:-1 30:-1 31:-1 32:-1 33:-1 34:-1 35:-1 36:-1 37:-1 38:-1 39:-1 40:-1 41:-1 42:-1 43:1 44:-1 45:-1 46:-1 47:-1 48:-1 49:-1 50:-1 51:-1 52:-1 53:-1 54:-1 
    ...
    

    .range 文件如下所示:

    x
    -1 1
    1 1859 3858
    2 0 360
    3 0 66
    4 0 1397
    ...
    

    因此,考虑到y_lower = -1y_upper = 1,您可以验证第一个元素2596 的转换:

    value = -1 + (1 - (-1)) * (2596 - 1859) / (3858 - 1859) = -0.26263131565782893
    

    这是期望值:)

    提示:

    通常您使用svm-scale 扩展您的训练集,获取您的模型(使用k 折交叉验证),最后使用从训练中获得的值(y_maxy_min)执行测试扩展数据。您可以在文件tools/easy.py中看到该过程。

    【讨论】:

    • 哦,非常感谢。我正在为 LibSVM 使用 cmd 模式。我的数据集在另一个文件夹中。因此,.range 文件在 LibSVM/Windows 文件夹中创建,.scale 文件在您的数据集所在的文件夹中创建。我的下限值和上限值分别为 0 和 1。因此,这给出了我之前提到的公式,即“从最小值中减去该值,然后除以特定特征的范围”。无论如何,非常感谢您的帮助!这是一个简单的问题,但却是一个很好的答案!
    猜你喜欢
    • 2012-08-05
    • 2013-06-07
    • 2021-06-22
    • 1970-01-01
    • 2012-04-20
    • 2016-04-03
    • 2011-01-15
    • 2015-07-16
    • 2021-10-31
    相关资源
    最近更新 更多