sklearn机器学习包中的对原始数据的预处理及训练集、测试集的分割

sklearn机器学习包中的对原始数据的预处理及训练集、测试集的分割

一 、数据预处理

sklearn.preprocessing 包提供了几个常见的实用功能和变换器类型,用来将原始特征向量更改为更适合机器学习模型的形式。

1. 标准化

按照数据集各特征的均值与方差对其进行标准化转换

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.])

2. 归一化

对各样本的不同特征进行数值处理(即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]])

3. 最小最大标准化

  1. 将特征缩放到给定的最小值和最大值之间,通常在 0~1 之间,即:
    ( x x m i n x m a x x m i n ) (\frac{x-x_{min}}{x_{max}-x_{min}})
  2. 将每个特征的最大绝对值转换至单位大小,即:
    ( x x m a x ) (\frac{x}{\mid{x_{max}}\mid})
    可以分别使用 preprocessing 中的类 MinMaxScalerMaxAbsScaler 实现。

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]])

4. 缺失值插补

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,))

猜你喜欢

转载自blog.csdn.net/wxw_csdn/article/details/83544800