数据预处理-归一化

归一化是指一种简化计算的方式,将数据经过处理之后限定到一定范围之内,如数据较大,可通过归一化计算后,将数据限定在[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

 

转载于:https://www.cnblogs.com/xuxiaowen1990/p/10775016.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值