我是Python的新手,有没有可以对数据进行规范化的函数?
例如,我在范围0 - 1
示例中设置了一系列列表:[0.92323, 0.7232322, 0,93832, 0.4344433]
我想将所有值标准化为范围0.25 - 0.50
谢谢,
答案 0 :(得分:3)
你可以沿着以下几点做:
>>> l = [0.92323, 0.7232322, 0.93832, 0.4344433]
>>> lower, upper = 0.25, 0.5
>>> l_norm = [lower + (upper - lower) * x for x in l]
>>> l_norm
[0.4808075, 0.43080805, 0.48458, 0.35861082499999997]
答案 1 :(得分:0)
您可以将sklearn.preprocessing
用于许多类型的预处理任务,包括规范化。
答案 2 :(得分:0)
以下函数考虑了一般情况:
def normalize(values, bounds):
return [bounds['desired']['lower'] + (x - bounds['actual']['lower']) * (bounds['desired']['upper'] - bounds['desired']['lower']) / (bounds['actual']['upper'] - bounds['actual']['lower']) for x in values]
使用:
normalize(
[0.92323, 0.7232322, 0.93832, 0.4344433],
{'actual': {'lower': 0, 'upper': 1}, 'desired': {'lower': 0.25, 'upper': 0.5}}
) # [0.4808075, 0.43080805, 0.48458, 0.35861082499999997]
normalize(
[5, 7.5, 10, 12.5, 15],
{'actual':{'lower':5,'upper':15},'desired':{'lower':1,'upper':2}}
) # [1.0, 1.25, 1.5, 1.75, 2.0]
我选择了一个两级dict作为参数,但你可以用多种方式给它,例如在两个单独的元组中,一个用于实际边界,另一个用于期望,是下边界的第一个元素和第二个上层:
def normalize(values, actual_bounds, desired_bounds):
return [desired_bounds][0] + (x - actual_bounds[0]) * (desired_bounds[1] - desired_bounds[0]) / (actual_bounds[1] - actual_bounds[0]) for x in values]
使用:
normalize(
[0.92323, 0.7232322, 0.93832, 0.4344433],
(0,1),
(0.25,0.5)
) # [0.4808075, 0.43080805, 0.48458, 0.35861082499999997]
normalize(
[5, 7.5, 10, 12.5, 15],
(5,15),
(1,2)
) # [1.0, 1.25, 1.5, 1.75, 2.0]
答案 3 :(得分:0)
其他帖子的建议方法不适用于大量实例。要规范列表中的值,您需要确定连接点(a,b),(c,d)的线的功能,其中“ a”是列表中最大的数字,“ b”是较大的数字在两个范围值中,“ c”是列表中最小的数字,而“ d”是两个范围值中的较小者。确定直线方程后,您可以将列表的值插入方程并求解。
我已经为上述转换编写了代码:
def normalize(list, range): # range should be (lower_bound, upper_bound)
l = np.array(list)
a = np.max(l)
c = np.min(l)
b = range[1]
d = range[0]
m = (b - d) / (a - c)
pslope = (m * (l - c)) + d
return pslope