数据标准化是将样本的属性缩放到某个指定的范围。
数据标准化的原因:
某些算法要求样本具有零均值和单位方差;需要消除样本不同属性具有不同量级时的影响:①数量级的差异将导致量级较大的属性占据主导地位;②数量级的差异将导致迭代收敛速度减慢;③依赖于样本距离的算法对于数据的数量级非常敏感。基于原始数据的均值(mean)和标准差(standarddeviation)进行数据的标准化。将A的原始值x使用z-score标准化到x’。z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
数据中心化: 是指变量减去它的均值。 数据标准化: 是指变量减去它的均值,再除以标准差。
其公式为: 新数据 =(原数据- 均值)/ 标准差 Python代码实现: 1.使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。
from sklearn import preprocessing import numpy as np X = np.array([[1, -1, 2], [2, 0, 0], [0, 1, -1]]) X_scaled = preprocessing.scale(X) # 调用skleam函数实现标准化 # 处理后数据的均值和方差 X_scaled.mean(axis=0) # 均值 X_scaled.std(axis=0) # 方差2.使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。
from sklearn.preprocessing import StandardScaler import numpy as np X = np.array([[ 1.,-1.,2.],[ 2.,0.,0.],[ 0.,1.,-1.]]) scaler=StandardScaler().fit(X) #声明类,并用fit()方法计算后续标准化的mean与std print('\n均值:',scaler.mean_) #类属性:均值 print('方差:',scaler.var_) #类属性:方差 X_scale=scaler.transform(X) #转换X print('\n标准化数据:\n',X_scale) y=np.array([[1.,1.,1.],[2.,2.,2.]]) y_scale=scaler.transform(y) #测试集标准化 print('\n测试集标准化数据:\n',y_scale) X_scale2=scaler.fit_transform(X) #直接计算并标准化的方法 print('\n原始数据直接标准化:\n',X_scale2)对于每个属性,设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x’。 其公式为: 新数据 =(原数据 - 最小值)/(最大值 - 最小值) Python代码实现:
from sklearn import preprocessing import numpy as np X_train = np.array([[1, -1, 2], [2, 0, 0], [0, 1, -1]]) min_max_scaler = preprocessing.MinMaxScaler() X_train_minmax = min_max_scaler.fit_transform(X_train) # 归一化处理 # print(X_train_minmax) # 将相同的缩放应用到测试集数据中 X_test = np.array([[-3., -1., 4.]]) X_test_minmax = min_max_scaler.transform(X_test) # print(X_test_minmax) # 缩放因子等属性 # print(min_max_scaler.scale_) # print(min_max_scaler.min_ )数据正则化是将样本的某个范数(如L1范数)缩放到到位1,正则化的过程是针对单个样本的,对于每个样本将样本缩放到单位范数,如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。
正则化的主要思想 是:对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。 该方法主要应用于文本分类和聚类中。例如,对于两个TF-IDF向量的l2-norm进行点积,就可以得到这两个向量的余弦相似性。 补充:
Python代码实现: 1.可以使用preprocessing.normalize()函数对指定数据进行转换:
from sklearn import preprocessing import numpy as np X = np.array([[1, -1, 2], [2, 0, 0], [0, 1, -1]]) X_normalized = preprocessing.normalize(X, norm='l2') # 正则化 print(X_normalized)2.可以使用processing.Normalizer()类实现对训练集和测试集的拟合和转换:
from sklearn import preprocessing import numpy as np X = np.array([[1, -1, 2], [2, 0, 0], [0, 1, -1]]) normalizer = preprocessing.Normalizer().fit(X) # fit does nothing X_normalized = normalizer.transform(X) print(X_normalized)本文参考来源: https://blog.csdn.net/qq_42672853/article/details/106404848 通过sklearn数据标准化预处理 https://www.cnblogs.com/chaosimple/p/4153167.html 【原】关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化 https://blog.csdn.net/binbigdata/article/details/84565486 数据预处理(方法总结)