我有一个csv文件,如下所示:
1,1.23,1.53,1.22,0.96,0.24,1.22,1.22,2.12,0.76,0.99
2,1.17,1.52,0.67,0.93,0.14,1.60,1.23,2.22,0.55,0.65
3,2.21,1.52,0.66,0.33,0.15,1.72,1.18,1.45,0.98,0.33
我想读取csv文件中的所有数据,但每行中的第一个值除外。
然后我想将数据标准化到特定范围。
由于stackoverflow,我学会了读取相关数据,并设法研究了足够的Python来对数据进行规范化。
此数据(如果我的代码正确)会将数据标准化为0到1。
但是我无法弄清楚如何将数据规范化到另一个范围(例如0.001到1)。
import numpy
array = numpy.genfromtxt('Anaconda3JamesData/james_test_3.csv', delimiter=',')
# get minimum and maximum values of
# all data except the first value in each row
maximum=array[:, 1:].max()
minimum=array[:, 1:].min()
print (minimum)
print (maximum)
# display the contents of the csv file except the first value in each row
print (array[:,1:])
# normalise all data in the array except
# the first value of each row
x = (array[:,1:] - minimum)/(maximum - minimum)
print (x)
我的输出是:
0.14
2.22
[[1.23 1.53 1.22 0.96 0.24 1.22 1.22 2.12 0.76 0.99]
[1.17 1.52 0.67 0.93 0.14 1.6 1.23 2.22 0.55 0.65]
[2.21 1.52 0.66 0.33 0.15 1.72 1.18 1.45 0.98 0.33]]
[[0.52403846 0.66826923 0.51923077 0.39423077 0.04807692 0.51923077
0.51923077 0.95192308 0.29807692 0.40865385]
[0.49519231 0.66346154 0.25480769 0.37980769 0. 0.70192308
0.52403846 1. 0.19711538 0.24519231]
[0.99519231 0.66346154 0.25 0.09134615 0.00480769 0.75961538
0.5 0.62980769 0.40384615 0.09134615]]
这确实看起来像我的规范化代码是正确的。它在0到1之间对所需的数据进行标准化。但是,如何在0.001到1之间对数据进行标准化?谢谢。
答案 0 :(得分:0)
我认为您正在尝试缩放归一化范围并引入和拦截以避免归一化0值。这就是我的做法。
您当前的变换等效于下式:
(x - min)/(max - min) = n/1
要将其缩放到大小为0.999的范围,请执行以下转换:
(x - min)/(max - min) = n/0.999
((x - min)/(max - min)) * 0.999 = n
但是,这将使您的归一化范围为[0,0.999]。因此,您需要引入0.001的截距,以使归一化范围为[0.001,1]
0.001 + ((x - min)/(max - min)) * 0.999 = n
将其应用于您的脚本将给出:
x = 0.001 + ((array[:,1:] - min)/(max - min)) * 0.999