Sklearn之StandardScaler(数据预处理)

1.哪些机器学习算法不需要(需要)做归一化?
概率模型(树形模型)不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF、XGboost。而像Adaboost、SVM、LR、Knn、KMeans之类的最优化问题就需要归一化。
2.StandardScaler原理
作用:使得经过处理的数据符合标准正态分布,即均值为0,标准差为1。且是针对每一个特征维度来做的,而不是针对样本。
标准差标准化(standardScale),其转化函数为:
x*=x-所有样本的均值μ/所有样本的标准差
3.代码:
用numpy:

import numpy as np
x_np = np.array([[1.5, -1., 2.],
                [2., 0., 0.]])
mean = np.mean(x_np, axis=0)
std = np.std(x_np, axis=0)
print('矩阵初值为:{}'.format(x_np))
print('该矩阵的均值为:{}\n 该矩阵的标准差为:{}'.format(mean,std))
another_trans_data = x_np - mean
another_trans_data = another_trans_data / std
print('标准差标准化的矩阵为:{}'.format(another_trans_data))

用sklearn:

from sklearn.preprocessing import StandardScaler  # 标准化工具
import numpy as np
 
x_np = np.array([[1.5, -1., 2.],
                [2., 0., 0.]])
scaler = StandardScaler()
x_train = scaler.fit_transform(x_np)
print('矩阵初值为:{}'.format(x_np))
print('该矩阵的均值为:{}\n 该矩阵的标准差为:{}'.format(scaler.mean_,np.sqrt(scaler.var_)))
print('标准差标准化的矩阵为:{}'.format(x_train))

你可能感兴趣的:(sklearn,机器学习,python)