2015-04-02 83 views
2

我有一个包含4列/属性和150行的数据集。我想用min-max标准化来标准化这些数据。到目前为止,我的代码是:2D矩阵中单个列的最小 - 最大规范化

minData=min(min(data1)) 
maxData=max(max(data1)) 
minmaxeddata=((data1-minData)./(maxData)) 

这里,minDatamaxData返回全球最小和最大值。因此,此代码实际上应用了二维矩阵中所有值的最小 - 最大值归一化,以便全局最小值为0且全局最大值为1.

但是,我想对每个列执行相同的操作单独使用。具体而言,2D矩阵的每列应该是独立于其他列的min-max标准化。

我试着用只用min(data1)max(data1),但得到的错误说,矩阵尺寸必须同意

但是,通过使用全局最小值和最大值,我得到了[0-1]范围内的值,并使用此归一化数据集进行了实验。我想知道我的结果是否有问题?我的理解也有问题吗?任何指导将不胜感激。

回答

4

如果我理解正确,您希望标准化每列data1。此外,由于每列都是独立数据集并且很可能具有不同的动态范围,因此可能不推荐执行全局最小 - 最大操作。我会建议您按照您的初始想法逐个标准化每列。

与你的错误去,你不能同时data1是一个矩阵min(data1)因为min(data1)会产生一个行向量减去data1。你正在减去一个向量的矩阵,这就是为什么你会得到这个错误。

如果您想要实现所要求的内容,请使用bsxfun来广播矢量,并将其重复播放至行数为data1。因此:

mindata = min(data1); 
maxdata = max(data1); 
minmaxdata = bsxfun(@rdivide, bsxfun(@minus, data1, mindata), maxdata - mindata); 

>> data1 = [5 9 9 9 3 3; 3 10 2 1 10 1; 2 4 4 6 5 5] 

data1 = 

5  9  9  9  3  3 
3 10  2  1 10  1 
2  4  4  6  5  5 

当我运行上面的标准化代码,我得到:

minmaxdata = 

    1.0000 0.8333 1.0000 1.0000   0 0.5000 
    0.3333 1.0000   0   0 1.0000   0 
     0   0 0.2857 0.6250 0.2857 1.0000 
+0

@ rayryeng:你的回答是真的helpful..and我会想知道如何修改相同的代码,如果我的数据集包含像 (8.1212879 71003636e-12,-0.01595515444407518) 我想获得整个值而不是四舍五入...你能建议任何想法吗? – puja 2015-04-03 05:49:02

+0

你是什么意思“没有圆整的整体价值”?你的预期结果是什么? – rayryeng 2015-04-03 06:03:40

+0

我的意思是,我需要归一化后数据集中的每个值,因为它们是...如果数据集中的值类似于8.121287971003636e-12,我想对其进行归一化并得到归一化的值。 ies,不是四舍五入到一些小数点).hope你明白了我的意思。 – puja 2015-04-03 06:42:07