我正在使用 libsvm 进行二元分类。我想尝试 grid.py ,因为据说可以改善结果。我在不同的终端中为五个文件运行了这个脚本,并且该脚本已经运行了超过 12 个小时。
这是我现在5个终端的状态:
[root@localhost tools]# python grid.py sarts_nonarts_feat.txt>grid_arts.txt
Warning: empty z range [61.3997:61.3997], adjusting to [60.7857:62.0137]
line 2: warning: Cannot contour non grid data. Please use "set dgrid3d".
Warning: empty z range [61.3997:61.3997], adjusting to [60.7857:62.0137]
line 4: warning: Cannot contour non grid data. Please use "set dgrid3d".
[root@localhost tools]# python grid.py sgames_nongames_feat.txt>grid_games.txt
Warning: empty z range [64.5867:64.5867], adjusting to [63.9408:65.2326]
line 2: warning: Cannot contour non grid data. Please use "set dgrid3d".
Warning: empty z range [64.5867:64.5867], adjusting to [63.9408:65.2326]
line 4: warning: Cannot contour non grid data. Please use "set dgrid3d".
[root@localhost tools]# python grid.py sref_nonref_feat.txt>grid_ref.txt
Warning: empty z range [62.4602:62.4602], adjusting to [61.8356:63.0848]
line 2: warning: Cannot contour non grid data. Please use "set dgrid3d".
Warning: empty z range [62.4602:62.4602], adjusting to [61.8356:63.0848]
line 4: warning: Cannot contour non grid data. Please use "set dgrid3d".
[root@localhost tools]# python grid.py sbiz_nonbiz_feat.txt>grid_biz.txt
Warning: empty z range [67.9762:67.9762], adjusting to [67.2964:68.656]
line 2: warning: Cannot contour non grid data. Please use "set dgrid3d".
Warning: empty z range [67.9762:67.9762], adjusting to [67.2964:68.656]
line 4: warning: Cannot contour non grid data. Please use "set dgrid3d".
[root@localhost tools]# python grid.py snews_nonnews_feat.txt>grid_news.txt
Wrong input format at line 494
Traceback (most recent call last):
File "grid.py", line 223, in run
if rate is None: raise "get no rate"
TypeError: exceptions must be classes or instances, not str
我已将输出重定向到文件,但这些文件目前不包含任何内容。另外,还创建了以下文件:
.out 文件中只有一行信息。 “.png”文件是一些 GNU PLOTS。
但我不明白上面的 GNU 图/警告传达的是什么。我应该重新运行它们吗?
如果每个输入文件包含大约 144000 行,此脚本可能需要多少时间?
您的数据非常庞大,有 144 000 行。所以这需要一些时间。我使用了像你这样的大数据,花了一周的时间才完成。如果您使用图像(我想您就是这样),因此数据很大,请尝试在创建数据之前调整图像大小。调整图像大小后,您应该会得到大致相同的结果。
libSVM 常见问题解答解答了您的问题:
问:为什么grid.py/easy.py有时会生成以下警告消息? 警告:z 范围为空 [62.5:62.5],调整为 [61.875:63.125] 注意:无法绘制非网格数据的轮廓! 没有任何问题,请忽略该消息。绘制轮廓时来自 gnuplot。
顺便说一下,您可以并行化 grid.py 操作。 libSVM 工具目录 README 文件对此有这样的说法:
平行网格搜索
您可以通过将作业分派到 共享相同文件系统的计算机集群。首先,您添加 grid.py 中的机器名称:
ssh_workers = [“linux1”,“linux5”,“linux5”]
然后设置您的 ssh,以便身份验证无需 询问密码。
同一台机器(例如,此处的 linux5)可以多次列出,如果 它有多个 CPU 或有更多 RAM。如果本地机器是 最好,你也可以放大nr_local_worker。例如:
nr_local_worker = 2
在我的Ubuntu 10.04安装中grid.py实际上是/usr/bin/svm-grid.py
我猜
grid.py
正在尝试寻找C(或Nu)的最佳值?
我不知道需要多长时间,但你可能想尝试这个 SVM 库,即使它是一个 R 包:svmpath。
如该页面所述,它将计算两类 SVM 分类器的整个“正则化路径”,所用时间大约与使用惩罚参数 C(或 Nu)的一个值训练 SVM 所需的时间相同。
因此,不要对 C 参数的值为 x 的 SVM 进行训练和交叉验证,然后对 C 的值 x+1、x+2 等再次执行所有这些操作。您只需训练 SVM 一次,然后可以这么说,事后查询其对不同 C 值的预测性能。
改变:
if rate is None: raise "get no rate"
grid.py
第223行至:
if rate is None: raise ValueError("get no rate")
另外,尝试添加:
gnuplot.write("set dgrid3d\n")
在
grid.py
中的这一行之后:
gnuplot.write("set contour\n")
这应该可以解决您的警告和错误,但我不确定它是否会起作用,因为
grid.py
似乎认为您的数据没有rate
。