0
点赞
收藏
分享

微信扫一扫

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

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

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

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

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)
    
举报

相关推荐

0 条评论