Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何规范化[0,1]范围内的数据帧中的数据?_Python_Dataframe_Normalization_Data Processing - Fatal编程技术网

Python 如何规范化[0,1]范围内的数据帧中的数据?

Python 如何规范化[0,1]范围内的数据帧中的数据?,python,dataframe,normalization,data-processing,Python,Dataframe,Normalization,Data Processing,我正在尝试实现一个使用PIMA数据集的论文。这是插补缺失值后的数据集: Preg Glucose BP SkinThickness Insulin BMI Pedigree Age Outcome 0 1 148.0 72.000000 35.00000 155.548223 33.600000 0.627 50 1 1 1 85.0 66.000000 29.00000 155.548223

我正在尝试实现一个使用PIMA数据集的论文。这是插补缺失值后的数据集:

Preg    Glucose     BP     SkinThickness    Insulin     BMI    Pedigree Age Outcome
0   1   148.0   72.000000   35.00000    155.548223  33.600000   0.627   50  1
1   1   85.0    66.000000   29.00000    155.548223  26.600000   0.351   31  0
2   1   183.0   64.000000   29.15342    155.548223  23.300000   0.672   32  1
3   1   89.0    66.000000   23.00000    94.000000   28.100000   0.167   21  0
4   0   137.0   40.000000   35.00000    168.000000  43.100000   2.288   33  1
5   1   116.0   74.000000   29.15342    155.548223  25.600000   0.201   30  0
说明:

df.describe()
      Preg       Glucose        BP        SkinThickness  Insulin     BMI    Pedigree    Age
count768.000000 768.000000  768.000000  768.000000  768.000000  768.000000  768.000000  768.000000
mean0.855469    121.686763  72.405184   29.153420   155.548223  32.457464   0.471876    33.240885
std 0.351857    30.435949   12.096346   8.790942    85.021108   6.875151    0.331329    11.760232
min 0.000000    44.000000   24.000000   7.000000    14.000000   18.200000   0.078000    21.000000
25% 1.000000    99.750000   64.000000   25.000000   121.500000  27.500000   0.243750    24.000000
50% 1.000000    117.000000  72.202592   29.153420   155.548223  32.400000   0.372500    29.000000
75% 1.000000    140.250000  80.000000   32.000000   155.548223  36.600000   0.626250    41.000000
max 1.000000    199.000000  122.000000  99.000000   846.000000  67.100000   2.420000    81.000000
本文对规范化的描述如下:

作为我们数据预处理的一部分,通过对数据集进行标准化处理,原始数据值被缩放,以便落在[0,1]值的小范围内。这将提高速度并降低运行时复杂性。使用Z分数,我们对我们的值集V进行归一化,以获得一组新的归一化值V',公式如下: V'=V-Y/Z 式中,V'=新的标准化值,V=以前的值,Y=平均值,Z=标准偏差


但是当我尝试运行上面的代码时,我得到的是负值和大于1的值,即不在[0,1]范围内。

您的标准化公式的目的不是将值放在[0,1]范围内

如果要规范化数据以使其处于这样的范围内,可以使用以下公式:

z=(实际值-数据库中的最小值)/(数据库中的最大值-数据库中的最小值)

先生,您不必手动操作,只需使用,您会在预处理部分找到不同的标准化和规范化方法。

假设您的原始数据帧是df,并且没有无效的浮点值,这应该可以工作

df2 = (df - df.values.min()) / (df.values.max()-df.values.min())

这里有几点需要注意

首先,除非输入数据具有非常特定的特征,否则z分数归一化不会产生[0,1]范围内的特征

其次,正如其他人所指出的,标准化和最小-最大缩放是两种最常见的数据归一化方法

设置数据 标准化 正如您所看到的,这些值远远不在[0,1]中。注:z分数归一化结果数据的范围将根据输入数据的分布而变化

最小最大缩放 这里我们确实得到了[0,1]中的值

讨论
sklearn
中存在这些和许多其他定标器。出于各种原因,我建议阅读
sklearn
文档并使用它们,而不是手动操作:

  • 因为你必须少打字,所以犯错误的机会就少了
  • sklearn
    至少在计算效率上与sklearn相同,而且通常更高效
  • 您应该使用测试数据培训中相同的缩放参数,以避免测试数据信息泄漏。(在大多数实际应用中,这不太可能是重要的,但这是一种良好的做法。)通过使用
    sklearn
    您不需要存储缩放训练数据的最小值/最大值/平均值/标准差等,以便随后在测试数据上重复使用。相反,您可以只使用
    scaler.fit\u transform(X\u train)
    scaler.transform(X\u test)
  • 如果以后要反转缩放,可以使用
    scaler.inverse\u transform(data)

  • 我相信还有其他原因,但这些是我想到的主要原因

    您的公式标准化了这些值,这与将它们强制到范围[0,1]不同。出于任何原因,你必须“手动”完成吗?如果没有,请查看
    sklearn
    MinMaxScaler
    ,其文档如下:欢迎使用堆栈溢出!请展示一个包含示例数据和代码的示例,以便我们更好地理解如何help@Chris我正在尝试使用PIMA数据集实现一篇论文。在本文中,他们使用z-分数归一化。作为我们数据预处理的一部分,我们对原始数据值进行了缩放,以便通过对数据集进行标准化,使其落在[0,1]值的小范围内。这将提高速度并降低运行时复杂性。使用Z分数,我们将我们的…标准化。请提供答案。@AMC已编辑该问题。
    df2 = (df - df.values.min()) / (df.values.max()-df.values.min())
    
    import pandas as pd
    
    df = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv')
    
    # For the purposes of this exercise, we'll just use the alphabet as column names
    df.columns = list(string.ascii_lowercase)[:len(df.columns)]
    
    $ print(df.head())
    
       a    b   c   d    e     f      g   h  i
    0  1   85  66  29    0  26.6  0.351  31  0
    1  8  183  64   0    0  23.3  0.672  32  1
    2  1   89  66  23   94  28.1  0.167  21  0
    3  0  137  40  35  168  43.1  2.288  33  1
    4  5  116  74   0    0  25.6  0.201  30  0
    
    
    # print the minimum and maximum values in the entire dataset with a little formatting
    $ print(f"Min: {standardised.min().min():4.3f} Max: {standardised.max().max():4.3f}")
    
    Min: -4.055 Max: 845.307
    
    min_max = (df - df.values.min()) / (df.values.max() - df.values.min())
    
    # print the minimum and maximum values in the entire dataset with a little formatting
    $ print(f"Min: {min_max.min().min():4.3f} Max: {min_max.max().max():4.3f}")
    
    Min: 0.000 Max: 1.000