如何规范-1和1之间的数据?


36

我已经看到了min-max归一化公式,但是该归一化了0到1之间的值。如何将-1到1之间的数据归一化?我的数据矩阵中同时有负值和正值。


1
如果您正在R中工作,请参阅此线程以了解一些选项。特别是,对已接受答案的注释具有此功能,您可以将'newMax'设置为1,将'newMin'设置为-1并在数据上运行该功能
mtreg 2015年

您可以在Wikipedia上找到如下参考:en.wikipedia.org/wiki/Normalization_(statistics)
Salem

Javascript示例,从此处获取。函数convertRange(value,r1,r2){return(value-r1 [0])*(r2 [1]-r2 [0])/(r1 [1]-r1 [0])+ r2 [0];} convertRange(328.17,[300.77,559.22],[1,10]); >>> 1.9541497388276272
朱塞佩·卡纳莱

1
@covfefe如果您仍然在身边,您可能希望接受答案之一
Simone

Answers:


97

x=xminxmaxxminx
x[01个]

要在标准化,可以使用:[-1个1个]

X''=2X-X最高X-X-1个

通常,您总是可以在[a,b]中获得一个新变量x'''X[一种b]

X=b-一种X-X最高X-X+一种

15
老实说,我对此没有引用。它只是随机变量的线性变换。看一下线性变换对随机变量支持的影响。
西蒙妮(Simone)

-1

我测试了随机生成的数据,并且

Xout=(ba)XinminXinmaxXinminXin+a

不保留分布的形状。真的很想看看使用随机变量函数对此进行的正确推导。

确实为我保留了形状的方法是使用:

Xout=Xinμinσinσout+μout

哪里

σout=ba6

(我承认使用6有点)并且

μout=b+a2

ab a = 1 b = 1和是所需范围;因此根据原始问题将是和。ba=1b=1

我从这个推理中得出了结果

Zout=Zin

Xoutμoutσout=Xinμinσin


3
您确定这可以确保转换后的数据在范围之内吗?在R中,尝试:set.seed(1); scale(rnorm(1000))*.333。我最多可获得1.230871。您的方法似乎只是对数据进行标准化的调整,而不是根据要求对其进行标准化。请注意,该问题并不要求使用保留分布形状的方法(这对于规范化是一个奇怪的要求)。
gung-恢复莫妮卡

3
我不确定原始转换如何无法保留数据的形状。这等同于减去一个常量,然后除以一个常量,这就是您的建议所要执行的操作,并且不会改变数据的形状。您的建议假设所有数据均在平均值的三个标准差之内,这对于较小的,近似正态分布的样本可能是合理的,但对于较大或非正态样本而言,可能不是合理的。
诺亚

1
@Noah这不等于减去和除以常量,因为数据的最小值和最大值是随机变量。 确实,对于大多数基础发行版来说,它们是可变的,比其他数据可变性更大,因此,将它们用于任何形式的标准化通常不是一个好主意。在这个答案中,不清楚b的含义或它们与数据的关系。ab
ub

2
@whuber是对的,但是我的意思是在给定的数据集中(即,将数据视为固定的),它们是常量,就像标准化数据集时样本均值和样本标准差作为常量一样。我的印象是OP希望规范化数据集而不是分布。
诺亚

@Noah我有相同的印象,但我相信目前的帖子可能会回应不同的解释。
ub
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.