数据标准化(Standardization or Mean Removal and Variance Scaling)
进行标准化缩放的数据均值为0,具有单位方差。
scale函数提供一种便捷的标准化转换操作,如下:
from sklearn import preprocessing #导入数据预处理包
X=[[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,-1.]]
X_scaled = preprocessing.scale(X)
X_scaled
X_scaled.mean(axis=0)
X_scaled.std(axis=0)
同样我们也可以通过preprocessing模块提供的Scaler(StandardScaler 0.15以后版本)工具类来实现这个功能:
scaler = preprocessing.StandardScaler().fit(X)
print(scaler)
print(scaler.mean_)
print(scaler.var_)
scaler.transform(X)
将数据缩放至给定的最小值与最大值之间,通常是0与1之间
公式:X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0)) ;
#例子:将数据缩放至[0, 1]间。训练过程: fit_transform()
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)
X_train_minmax
#将上述得到的scale参数应用至测试数据
X_test = np.array([[ -3., -1., 4.]])
X_test_minmax = min_max_scaler.transform(X_test) #out: array([[-1.5 , 0. , 1.66666667]])
#可以用以下方法查看scaler的属性
print(min_max_scaler.scale_) #out: array([ 0.5 , 0.5, 0.33...])
print(min_max_scaler.min_) #out: array([ 0., 0.5, 0.33...])
它通过除以最大值将训练集缩放至[-1,1]。这意味着数据已经以0为中心或者是含有非常非常多0的稀疏数据。
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
X_train_maxabs
X_test = np.array([[ -3., -1., 4.]])
X_test_maxabs = max_abs_scaler.transform(X_test)
X_test_maxabs
max_abs_scaler.scale_
把数据集中的每个样本所有数值缩放到(-1,1)之间。
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
X_normalized = preprocessing.normalize(X, norm='l2')
X_normalized
normalizer = preprocessing.Normalizer().fit(X) # fit does nothing
normalizer
normalizer.transform(X)
normalizer.transform([[-1., 1., 0.]])
将数值型数据转化为布尔型的二值数据,可以设置一个阈值(threshold)
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
binarizer = preprocessing.Binarizer().fit(X) # fit does nothing
binarizer
binarizer.transform(X)
binarizer = preprocessing.Binarizer(threshold=1.1)
binarizer.transform(X)
LabelBinarizer通常用于通过一个多类标签(label)列表,创建一个label指示器矩阵
lb = preprocessing.LabelBinarizer()
lb.fit([1, 2, 6, 4, 2])
lb.classes_
lb.transform([1, 6])
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit([1, 2, 2, 6])
le.classes_
le.transform([1, 1, 2, 6])
le.inverse_transform([0, 0, 1, 2])