自写函数实现特征预处理之标准化

标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模、特征、分布差异等对模型的影响。

标准化数据通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据符合标准正态分布,即均值为0,标准差为1,转化公式:

x=\frac{x-\bar{x}}{\sigma }

通过函数要怎么实现呢?公式较为复杂我们可以采取拆分的方法逐一完成。

1、先计算平均值 \bar{x}

data = [[5, 6, 3], [4, 6, 8], [6, 9, 7]]


def data_mean(data):
    means = []
    for i in range(len(data[0])):
        values = [row[i] for row in data]
        mean = sum(values)/float(len(data))
        means.append(mean)
    return means

2、计算标准差  \sigma =\sqrt{\frac{\sum_{1}^{n}(x-\bar{x})^2}{n-1}}

def data_standard(data):
    x_mean = data_mean(data)
    values = []

    for i in range(len(data)):
        value = [pow(row[i]-x_mean[i], 2)/float(len(data)-1) for row in data]
        values.append(value)    # 计算(x-mean)**2/n-1

    standard = [pow(sum(x), 0.5) for x in values]   # 累加开方
    return standard

3、标准化  x=\frac{x-\bar{x}}{\sigma }

def standardized(data):
    x_mean = data_mean(data)
    std = data_standard(data)
    values = []
    for i in range(len(data)):
        value = [(row[i] - x_mean[i])/std[i] for row in data]
        values.append(value)
    return values

到此特征预处理之数据标准化就完成了,下面是完整代码:

data = [[5, 6, 3], [4, 6, 8], [6, 9, 7]]


def data_mean(data):
    means = []
    for i in range(len(data[0])):
        values = [row[i] for row in data]
        mean = sum(values)/float(len(data))
        means.append(mean)
    return means


def data_standard(data):
    x_mean = data_mean(data)
    values = []

    for i in range(len(data)):
        value = [pow(row[i]-x_mean[i], 2)/float(len(data)-1) for row in data]
        values.append(value)    # 计算(x-mean)**2/n-1

    standard = [pow(sum(x), 0.5) for x in values]   # 累加开方
    return standard


def standardized(data):
    x_mean = data_mean(data)
    std = data_standard(data)
    values = []
    for i in range(len(data)):
        value = [(row[i] - x_mean[i])/std[i] for row in data]
        values.append(value)
    return values


if __name__ == '__main__':
    # a = standard(data)
    standardized(data)
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值