标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模、特征、分布差异等对模型的影响。
标准化数据通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据符合标准正态分布,即均值为0,标准差为1,转化公式:
通过函数要怎么实现呢?公式较为复杂我们可以采取拆分的方法逐一完成。
1、先计算平均值
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、计算标准差
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、标准化
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)