1、什么是均值移除
在介绍均值移除之前 先介绍一下数据在做处理时一般都是认为
一行一样本,一列一特征 而我们的均值移除操作也基本是对列(特征)进行操作
均值移除:平均值调整为0 标准差调整为1
设数据集为X 【7,8,9,10,11】
数据集的平均值为M = 9
数据集的标准差S = 2
以下是标准差公式
求出上述所需条件以后
数据集为X 每个数减去平均值以后在除以标准差即可把平均值调整为0 标准差调整为1
[(7-M)/s , (8-M)/S, … (11-M)/S]
均值移除以后X=>[-1, -0.5, 0, 0.5, 1]
2、为什么要均值移除
上面说到均值移除基本上是对列操作
如果特征基准值和分散度不同在某些算法(例如回归算法,KNN等)上可能会大大影响了模型的预测能力,所以我们会确保每一个特征列的数值都在类似的数据范围之间,防止某一个特征列数据天然的数值太大而一家独大影响结果
3、原理示例代码
# -*- coding:utf-8 -*-
import numpy as np
#创建数据集
sample = np.array([
[2, 4, 5, -1],
[3, 1, 7, -2],
[6, -3, 2, -1],
], dtype="float")
print(sample.mean(axis=0)) #列的平均值 axis=0取列
print(sample.std(axis=0)) #列的标准差
s = sample.copy()
# 因为一行一样本,一列一特征,要对特征进行处理均值移除所以先转置 (因为遍历只会对水平方向进行遍历)
for col in s.T:
col_mean = col.mean() #取每一列的平均值
col_std = col.std() #取每一列的标准差
col -= col_mean #让平均值为0 每个数减去此列的平均值
col /= col_std #让标准差为1 每个数减去此列的平均值以后再除以此列标准差
print(s)
print(s.mean(axis=0)) #修改以后列的平均值
print(s.std(axis=0)) #修改以后列的标准差
4、调用库包代码
import numpy as np
import sklearn.preprocessing as sp #用来均值移除
sample = np.array([
[2, 4, 5, -1],
[3, 1, 7, -2],
[6, -3, 2, -1],
], dtype="float")
new_sample = sp.scale(sample) #做均值移除操作
print(new_sample)