原文:https://blog.csdn.net/ckzhb/article/details/72871140
一、基本使用方法
[y,PS]=mapminmax(x,ymin,ymax ) %如果在此处未指定ymin,ymax,则ymin的默认值为-1,ymax的默认值为1。
mapminmax(data )的默认规范化范围为[-1,1 ],规范每一行。一定记住是对行进行归一化!!!
二、正规化的讨论
参考: http://www.ilovematlab.cn/thread-63766-1-1.html
[train_scale,test_scale,PS]=scaleforsvm(train_data,test_data,ymin,ymax ) ]
输入:
train_data :训练集
test_data :测试集
ymin )规范化范围下限(可以不输入,默认值为0 ) ) )。
ymax )规范化范围上限(可以不输入,默认值为1 ) ) )。
输出:
train_scale :规范化训练集
test_scale :规范化测试集
ps :正规化地图
测试代码:
train_data=[1 12; 3 ) 4; 7]
test_data=[9 10; 6(2) )。
[train_scale,test_scale,PS]=scaleforsvm(train_data,test_data,0,1 ) ]
执行结果:
train _ data=1123478 test _ data=91062 train _ scale=0. 0000.2500.2000.7500.6000 test _ scale=1. 0000.80000 xmin : [2x1 double ] xrange : [2x1 double ] y rows 33602 ymin : y range 3360 3358 www.Sina.com/http://www.Sina
)1)是按样本规范化(按行规范化)还是按维规范化?
)2)是将训练集和测试集分别规范化,还是一起排大队一起规范化?
上面我个人的理解和解决办法是:
(1)按维度规范化
原因:由于每个示例的维各不相同,因此每个示例的维都是规范化的,如果维位数相差很大,则示例中的低位属性为0,导致原始信息丢失太多。 例如:
sample=
1 2 0.5 100000
5 7 0.4 200000
如果对每个采样按行规范化[ 0,1 ],则结果为sample_scale=
0.0000 0.0000 0 1.0000
0.0000 0.0000 0 1.0000
通过位数的差异,可以看到每个样本的前三维数据被归一化为0。 这实际上不合理,原始数据的信息丢失太多了。 但是,如果按一维进行规范化,则对于同一维,维级别相同,因此在大范围内不会发生这种情况。 如果对每个一维执行[ 0,1 ]规范化(按列规范化),则结果如下:
sample_scale=
0 0 1 0
1 1 0 1
)2)训练集和测试集放在一起,一起规范化。
理由:使用测试代码示例
train_data=
1 12
3 4
7 8
test_data=
9 10
6 2
将训练集逐维归一化,记录该归一化图,如果有测试集,则使用该归一化图对测试集进行归一化,则归一化训练集时在第一维归一化图上记录的最大值为7, 虽然假设所有数据的第一维最大值都不能超过7,但是带来新的测试集时的第一维值不一定需要大于7,测试数据中测试集的第一维值被认为不大于7,即分别规范化但一旦采用了,这个步骤就十分重要,因为这是使用
问题1 :
在智能算法程序的实现中,原始数据需要每个属性(维度规范化)。 也就是说,数据集data中的行必须表示属性,列必须表示示例数据的数量。 另一方面,由于数据读取函数textread、xlsread基于数据集逐列读取,因此规范化时需要注意是否需要倒排。
问题2 :
一般格式:
[inputtrain,setting]=mapminmax(input_train ' );
inputtest=mapminmax('apply ',input_test ',setting );
这些命令意味着根据input_train的规范化规则对Input_text进行规范化。 但是,input_test中的数据必须介于inout_train数据的最小值和最大值之间
两个观点:
一是数据集和测试集合并规范化; 另一件事是你不用在意测试集的最大值。 实际上测试数据本身不确定,正好可以检测模型的诊断/预测能力。 个人倾向于后者。 具体情况还要具体应对
note:
在BP神经网络中,newff函数使用的m行数据n列中,行表示数据属性值,而列表示数据样本的数量。
在libSVM中,用于每个函数的矩阵m行n列例如为880X6,其中行指示数据样本的数量,而列指示数据的属性值。 两者正好相反。
-----------------