我正在尝试实现一篇使用PIMA Indians糖尿病数据集的论文。这是输入缺失值后的数据集:
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-Score,我们归一化我们的值集V,以获得一组新的归一化值V’,方程如下:V'=V-Y/Z其中V’=新的归一化值,V=以前的值,Y=平均值,Z=标准偏差
z=scipy.stats.zscore(df)
但当我尝试运行上面的代码时,我会得到负值和大于1的值,即不在[0,1]的范围内。
这是因为你没有完成这个过程:你所做的只是得到Z分数的向量。您必须应用其余的指定计算。
Z分数表示该元素高于/低于平均值的标准偏差。你仍然需要减去平均值并除以sdev,才能得到规范的[-1,1]归一化。我希望你现在可以修改所需的代数,得到你想要的[0,1]区间。