【重要】利用libsvm对数据回归预测时,进行归一化处理总结

标签:
缩放准确率参数训练a1 |
分类: 模型算法,高频交易 |
svm-scale有两点好处,第一点是加快训练速度,第二点是比没归一化前同样的条件训练出来的模型准确率更高。
该过程要用到libsvm软件包中的svm-scale.exe
svm-scale用法:
用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper] [-s save_filename] [-r restore_filename] filename (缺省值: lower = -1,upper = 1,没有对y进行缩放) 其中, -l:数据下限标记;lower:缩放后数据下限; -u:数据上限标记;upper:缩放后数据上限; -y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;(回归需要对目标进行缩放,因此该参数可以设定为 –y -1 1 ) -s save_filename:表示将缩放的规则保存为文件save_filename; -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放; filename:待缩放的数据文件(要求满足前面所述的格式)。
缩放规则文件可以用文本浏览器打开,看到其格式为:
y
lower upper
min max
x
lower upper
index1 min1 max1
index2 min2 max2
其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表 示特征序号;min 转换前该特征的最小值;max 转换前该特征的最大值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。
如果使用svm-scale,训练数据使用归一化后的数据(x,y都需要归一化),测试数据也必须使用归一化后的数据,最后回归结果也是归一化后的y值,所以需要了解y的反归一化才能知道实际的预测值。
归一化程序为:
以上两个截图是libsvm2.91版本中svm-scale.c文件里对y和x归一化的程序。
x的归一化程序:
value = lower + (upper-lower) * (value-feature_min[index])/(feature_max[index]-feature_min[index]);
y的归一化程序:
value = y_lower + (y_upper-y_lower) * (value - y_min)/(y_max-y_min);
上面代码是实现的以下归一化公式:
反归一化程序:
y=(((y`-y_lower)*(y_max-y_min)/(y_upper-y_lower))+y_min)
y`为归一化后预测出来的值,是归一化的值,不是实际的值,y是反归一化出来的实际值。
反归一化公式类似前面的归一化公式,只是将上面归一化公式的min和lower的位置交换,max和upper的位置交换。
其中value为归一化后的值,其他参数与前面介绍的相同。
建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。