LIBSVM中的归一化问题,libsvm中的归一化其实分为两部分,一个是训练样本的归一化,另外一个是测试样本的归一化,按照2.89所提供的windows下的svm-scale.exe来做的.其中该程序的代码在2.89vc版本的根目录下.
其中svm-scale.exe对训练样本进行归一化的时候,用到的参数行是这样的
-s scale表示的是将训练得到的一些参数存入scale中,相应的,-r scale是导出这些参数
我们可以看看scale中的数据
这里的开始为1的地方往后,每行有两个值,这两个值是训练样本中,属性列1所有数据的最大值和最小值,本文测试中用到了8个属性列,因此有八行最值.
而训练的时候就是寻找这些值,从训练样本中.预测使则是根据这些值来归一化数据.
再来看看归一化的公式.
这个是主要的执行代码,y_lower和y_upper本来为浮点数的最值,但是程序中,至少本文中用到的是-1和1.
y_max和y_min就是上边scale中的某一属性列的最大值和最小值.
因为训练一旦结束,按照程序中的机理,scale中各属性列的最值也就确定了,不再变化,这样就要求训练样本必须完全,否则如果某一列最值并不是实际数据中的最值,可能导致归一化后的数据并不再[-1,1]之间.
阅读(9092) | 评论(0) | 转发(0) |