标准化以引入[0,1]范围

2024-04-26 13:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的数据集,从中我得到两组数据点,然后我必须绘制和比较。这两个图的范围不同,所以我希望它们在[0,1]的范围内。对于以下代码和特定的数据集,我在1处获得一条常量行作为数据集绘图,但此规范化对于其他集很有效:

plt.plot(range(len(rvalue)),np.array(rvalue)/(max(rvalue)))

对于此代码:

oldrange = max(rvalue)-min(rvalue) #NORMALIZING
newmin=0
newrange = 1 + 0.9999999999 - newmin
normal = map(lambda x, r=float(rvalue[-1] - rvalue[0]): ((x - rvalue[0]) / r)*1 - 0, rvalue)
plt.plot(range(len(rvalue)),normal)

我知道错误:

ZeroDivisionError: float division by zero

对于所有数据集。我不知道如何把这两个图放在一个范围内比较。


Tags: 数据代码绘图lenplot绘制rangeplt
3条回答

使用数据序列中的最小值和最大值,使用以下方法规范化0到1范围内的数据:

import numpy as np

def NormalizeData(data):
    return (data - np.min(data)) / (np.max(data) - np.min(data))

查找数组的范围由numpy内置函数numpy.ptp()提供,您的问题可以通过以下方式解决:

#First we should filter input_array so that it does not contain NaN or Inf.
input_array=np.array(some_data)
if np.unique(input_array).shape[0]==1:
    pass #do thing if the input_array is constant
else:
    result_array=(input_array-np.min(input_array))/np.ptp(input_array)
#To extend it to higher dimension, add axis= kwarvg to np.min and np.ptp

使用scikit: http://scikit-learn.org/stable/modules/preprocessing.html#scaling-features-to-a-range

它具有内置函数,可以将特征缩放到指定范围。您将在这里找到其他要规范化和标准化的函数。

请参见以下示例:

>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[ 0.5       ,  0.        ,  1.        ],
       [ 1.        ,  0.5       ,  0.33333333],
       [ 0.        ,  1.        ,  0.        ]])

相关问题 更多 >