马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 小钱还没睡醒 于 2022-10-19 13:00 编辑
题目:利用闭包实现数据的归一化与反归一化。提示: Xmax 和 Xmin 为自由变量(含义见参考资料2)。
所有数据写在代码之中,需 print 出待归一化数据的归一化结果,以及待反归一化数据的反归一化结果。
参考资料2: 数据归一化与反归一化
在统计分析或机器学习中,往往需要对输入数据进行归一化,使得所有数据的取值都在0到1之间,以便于排除由于数据标度不同造成的负面影响。
归一化的公式为:
Xnorm = ( x - Xmin) / ( Xmax - Xmin )
其中,x∈X为一个数据, 为多个数据组成的向量,Xmax 、 Xmin 分别为 的最大值和最小;值,Xnorm 为 x 归一化之后的结果。
归一化的关键信息是 Xmax 和 Xmin ,它们可被用于后续数据反归一化。反归一化的公式为:
x = Xmin + Xnorm( Xmax - Xmin)
实现步骤:
根据样本数据确定最大值和最小值;
根据最大值和最小值归一化新的数据;
根据最大值和最小值反归一化新的数据。
实验要求2数据
样本数据 [399, 641, 412, 419, 40, 691, 874, 961, 310, 624, 490, 291, 266, 946, 205, 627, 622, 965, 65, 889, 410,
559, 234, 220, 130, 247, 978, 275, 968, 164, 958, 316, 81, 328, 508, 254, 916, 236, 718, 452, 869, 825, 93, 915, 819,
175, 763, 257, 266, 689, 712, 255, 940, 38, 642, 355, 592, 275, 175, 638, 363, 678, 521, 733, 223, 356, 799]
待归一化数据 [717, 233, 140, 852, 257, 948, 346, 208, 851, 510, 408, 758, 344, 655, 523, 186]
待反归一化数据 [0.3202127659574468, 0.7585106382978724, 0.1148936170212766, 0.9382978723404255,
0.5414893617021277, 0.8095744680851064, 0.5851063829787234, 0.8776595744680851,
0.33404255319148934, 0.009574468085106383, 0.9995744680851064, 0.6797872340425531,
0.7595744680851064, 0.20638297872340425, 0.14893617021276595, 0.5563829787234043]
这题我毫无头绪,有点看不懂题
应该是这样理解:
简单点理解,其实 归一化 就是 某个待归一化的数(测量值)dx (满足 SMin <= dx <= SMax ,即以样本数据为基准参考,不能太大也不能太小) 这样就可以套用归一化的公式,计算得出 0-1 的 归一化normalized后的 值。
反归一化,也是类似,只是待反归一化的值 是 0-1的某个小数值, 套用反归一化denormalized公式,即可 算出对应的 反归一化值(某个基于样本数据的极值 可能的测量值)。
代码如下: sdata = [399, 641, 412, 419, 40, 691, 874, 961, 310, 624, 490, 291, 266, 946, 205, 627, 622, 965, 65, 889, 410,559, 234, 220, 130, 247, 978, 275, 968, 164, 958, 316, 81, 328, 508, 254, 916, 236, 718, 452, 869, 825, 93, 915, 819,175, 763, 257, 266, 689, 712, 255, 940, 38, 642, 355, 592, 275, 175, 638, 363, 678, 521, 733, 223, 356, 799]
Xmax, Xmin = max(sdata), min(sdata)
Xmax, Xmin
(978, 38)
d = [717, 233, 140, 852, 257, 948, 346, 208, 851, 510, 408, 758, 344, 655, 523, 186]
normalized = list(map(lambda x: (x-Xmin)/(Xmax-Xmin), d))
normalized
[0.7223404255319149, 0.2074468085106383, 0.10851063829787234, 0.8659574468085106, 0.23297872340425532, 0.9680851063829787, 0.3276595744680851, 0.18085106382978725, 0.8648936170212767, 0.502127659574468, 0.39361702127659576, 0.7659574468085106, 0.32553191489361705, 0.6563829787234042, 0.5159574468085106, 0.1574468085106383]
nd = [0.3202127659574468, 0.7585106382978724, 0.1148936170212766, 0.9382978723404255,0.5414893617021277, 0.8095744680851064, 0.5851063829787234, 0.8776595744680851,0.33404255319148934, 0.009574468085106383, 0.9995744680851064, 0.6797872340425531,0.7595744680851064, 0.20638297872340425, 0.14893617021276595, 0.5563829787234043]
denormalized = list(map(lambda n: Xmin + n * (Xmax-Xmin), nd ))
denormalized
[339.0, 751.0, 146.0, 920.0, 547.0, 799.0, 588.0, 863.0, 352.0, 47.0, 977.6, 677.0, 752.0, 232.0, 178.0, 561.0]
|