数据预处理-归一化

归一化是指一种简化计算的方式,将数据经过处理之后限定到一定范围之内,如数据较大,可通过归一化计算后,将数据限定在[0,1]内。数据归一化可加速算法的快速收敛,而且在后续数据处理上更加方便。

数学公式为y=(x-minValue)/(maxValue-minValue),maxValue、minValue、x、y分别代表每一个字段的最大值、最小值、字段值和最终归一化结果,例:[3,4,5,6,7],归一化后的结果为[0,1/4,1/2,3/4,1]。

def uniformData(dataMat):
    '''
    :param dataMat:原始数据
    :return: dataMat处理后的数据
    '''
    col=0
    for i in dataMat[0]:#取矩阵第一行,求出列数
        col+=1
    rol=len(dataMat)    #矩阵的行数
    maxNum=[0]*col      #设定最大值均为0
    minNum=[9999999999]*col     #设定最小值均为9999999999

    for i in dataMat:#求每列的最大值
        for j in range(0,col):
            if i[j]>maxNum[j]:
                maxNum[j]=i[j]

    for i in dataMat:#求每列的最小值
        for j in range(0,col):
            if i[j]<minNum[j]:
                minNum[j]=i[j]

    #section=list(map(lambda x:x[0]-x[1],zip(maxNum,minNum))) 不好理解,用换成下面写法
    section=list(map(lambda x,y:x-y,maxNum,minNum))#最大最小值差
    sample=[]
    for i in dataMat:
         sample.append(list(map(lambda x,y,z:(x-y)/z,i,minNum,section)))   #利用公式计算最终的值
    return sample
#测试数据
data=[[63,145,233,150,2.3,0],\
     [67,160,286,108,1.5,3],\
     [67,120,229,129,2.6,2],\
     [37,130,250,187,3.5,0],\
     [41,130,204,172,1.4,0],\
     [56,120,236,178,0.8,0],\
     [62,140,268,160,3.6,2],\
     [57,120,354,163,0.6,0],\
     [63,130,254,147,1.4,1]]

for i in uniformData(data):
    print(i)

测试结果:

E:\Anaconda3\python.exe E:/归一化.py
[0.8666666666666667, 0.625, 0.19333333333333333, 0.5316455696202531, 0.5666666666666665, 0.0]
[1.0, 1.0, 0.5466666666666666, 0.0, 0.3, 1.0]
[1.0, 0.0, 0.16666666666666666, 0.26582278481012656, 0.6666666666666666, 0.6666666666666666]
[0.0, 0.25, 0.30666666666666664, 1.0, 0.9666666666666667, 0.0]
[0.13333333333333333, 0.25, 0.0, 0.810126582278481, 0.26666666666666666, 0.0]
[0.6333333333333333, 0.0, 0.21333333333333335, 0.8860759493670886, 0.0666666666666667, 0.0]
[0.8333333333333334, 0.5, 0.4266666666666667, 0.6582278481012658, 1.0, 0.6666666666666666]
[0.6666666666666666, 0.0, 1.0, 0.6962025316455697, 0.0, 0.0]
[0.8666666666666667, 0.25, 0.3333333333333333, 0.4936708860759494, 0.26666666666666666, 0.3333333333333333]

进程已结束,退出代码 0

猜你喜欢

转载自www.cnblogs.com/xuxiaowen1990/p/10775016.html
今日推荐