sklearn.preprocessing 包提供了几个常见的实用功能和变换器类型,用来将原始特征向量更改为更适合机器学习模型的形式。
按照数据集各特征的均值与方差对其进行标准化转换
sklearn.preprocessing.scale(X, axis=0, with_mean=True, with_std=True, copy=True)
axis 可以分别取0 或者 1
from sklearn import preprocessing
import numpy as np
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
X_scaled = preprocessing.scale(X_train)
X_scaled
array([[ 0. , -1.22474487, 1.33630621],
[ 1.22474487, 0. , -0.26726124],
[-1.22474487, 1.22474487, -1.06904497]])
X_scaled.mean(axis=0)
array([0., 0., 0.])
X_scaled.std(axis=0)
array([1., 1., 1.])
对各样本的不同特征进行数值处理(即axis=1),消除量纲的影响。
sklearn.preprocessing.normalize(X, norm=‘l2’, axis=1, copy=True, return_norm=False)
norm 可以取’l1’ 、‘l2’、‘max’,axis 可以取0、1
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
X_normalized = preprocessing.normalize(X, norm='l2')
X_normalized
array([[ 0.40824829, -0.40824829, 0.81649658],
[ 1. , 0. , 0. ],
[ 0. , 0.70710678, -0.70710678]])
class sklearn.preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)
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
array([[0.5 , 0. , 1. ],
[1. , 0.5 , 0.33333333],
[0. , 1. , 0. ]])
# 按训练集的最大最小值对测试集进行缩放
X_test = np.array([[ -3., -1., 4.]])
X_test_minmax = min_max_scaler.transform(X_test)
X_test_minmax
array([[-1.5 , 0. , 1.66666667]])
#训练集中最大最小值查的倒数
min_max_scaler.scale_
array([0.5 , 0.5 , 0.33333333])
#训练集中的最小值
min_max_scaler.min_
array([0. , 0.5 , 0.33333333])
MaxAbsScaler 与 MinMaxScaler 类似,这里就不做详细的介绍了。
当你不想创建对象时,可以使用 scale 模块中提供的方法 minmax_scale 以及 maxabs_scale 。
preprocessing.minmax_scale(X_train)
array([[0.5 , 0. , 1. ],
[1. , 0.5 , 0.33333333],
[0. , 1. , 0. ]])
preprocessing.maxabs_scale(X_train)
array([[ 0.5, -1. , 1. ],
[ 1. , 0. , 0. ],
[ 0. , 1. , -0.5]])
Imputer 类提供了估算缺失值的基本策略,使用缺失值所在的行/列中的平均值、中位数或者众数来填充。
class sklearn.preprocessing.Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0, verbose=0, copy=True)
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]]) #训练类
X = [[np.nan, 2], [6, np.nan], [7, 6]] #使用训练的均值插补缺失值
imp.transform(X)
利用 scikit-learn 包中的 train_test_split 辅助函数可以很快地将实验数据集按照不同的比例划分为训练集(training sets)和测试集(test sets)。
sklearn.model_selection.train_test_split(*arrays, **options)
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris = load_iris()
iris.data.shape,iris.target.shape
((150, 4), (150,))
#测试集的占比为0.4
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=0)
X_train.shape, y_train.shape
((90, 4), (90,))
X_test.shape, y_test.shape
((60, 4), (60,))