(一)sklearn数据预处理

from sklearn import preprocessing import numpy as np X_train = np.array([[ 1., -1.,2.], [ 2.,0.,0.], [ 0.,1., -1.]])

  • 1
  • 2
  • 3
  • 4
  • 5
1、使得均值0,方差1
X_scaled = preprocessing.scale(X_train)

  • 1
X_scaled

  • 1
array([[ 0., -1.22474487,1.33630621], [ 1.22474487,0., -0.26726124], [-1.22474487,1.22474487, -1.06904497]])

  • 1
  • 2
  • 3
  • 4
X_scaled.mean(axis=0),X_scaled.std(axis=0)

  • 1
(array([ 0.,0.,0.]), array([ 1.,1.,1.]))

  • 1
  • 2
“axis=0”代表对arr[i][j]..等维度进行计算,假如arr[i][j]是3?33?3的数组,
计算后得到1?31?3的结果,即对每一列数据求平均值。
2、使得放缩在某个范围[0,1]
X_train = np.array([[ 1., -1.,2.], [ 2.,0.,0.], [ 0.,1., -1.]])

  • 1
  • 2
  • 3
min_max_scaler = preprocessing.MinMaxScaler()

  • 1
X_train_minmax = min_max_scaler.fit_transform(X_train)

  • 1
X_train_minmax

  • 1
array([[ 0.5,0.,1.], [ 1.,0.5,0.33333333], [ 0.,1.,0.]])

  • 1
  • 2
  • 3
  • 4
可以将相同的变换运用到test数据集
X_test = np.array([[ -3., -1.,4.]]) X_test_minmax = min_max_scaler.transform(X_test) X_test_minmax

  • 1
  • 2
  • 3
array([[-1.5,0.,1.66666667]])

  • 1
  • 2
3、使得放缩在某个范围[-1,1]
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# doctest +NORMALIZE_WHITESPACE^

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
array([[ 0.5, -1. ,1. ], [ 1. ,0. ,0. ], [ 0. ,1. , -0.5]])

  • 1
  • 2
  • 3
  • 4
类似scale, 对应有minmax_scale 和 maxabs_scale
4、缩放稀疏数据
MaxAbsScaler和maxabs_scale专门用于扩展稀疏数据
5、二进制归一化
X = [[ 1., -1.,2.], [ 2.,0.,0.], [ 0.,1., -1.]]binarizer = preprocessing.Binarizer().fit(X)# fit does nothing binarizer

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
Binarizer(copy=True, threshold=0.0)

  • 1
  • 2
binarizer.transform(X)

  • 1
array([[ 1.,0.,1.], [ 1.,0.,0.], [ 0.,1.,0.]])

  • 1
  • 2
  • 3
  • 4
#设定0,1划分值 binarizer = preprocessing.Binarizer(threshold=1.1) binarizer.transform(X)

  • 1
  • 2
  • 3
array([[ 0.,0.,1.], [ 1.,0.,0.], [ 0.,0.,0.]])

  • 1
  • 2
  • 3
  • 4
6.编码分类功能
特征不是连续值而是分类
属性可取的离散值:[“male”, “female”][“from Europe”, “from US”, “from Asia”][“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]
[“male”, “from US”, “uses Internet Explorer”]可以表示:[0, 1, 3]
[“female”, “from Asia”, “uses Chrome”]可以表示:[1, 2, 1]
#给定数据,可以自动推断属性的类别数 enc = preprocessing.OneHotEncoder() enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])

  • 1
  • 2
  • 3
OneHotEncoder(categorical_features='all', dtype=, handle_unknown='error', n_values='auto', sparse=True)

  • 1
  • 2
  • 3
#对一个数据进行重新编码 enc.transform([[0, 1, 3]]).toarray()

  • 1
  • 2
array([[ 1.,0.,0.,1.,0.,0.,0.,0.,1.]])

  • 1
  • 2
#编码长度是9,即2+3+4,对应上面每个类别属性长度

  • 1
#显示给出每个类别属性个数 enc = preprocessing.OneHotEncoder(n_values=[2, 3, 4]) # Note that there are missing categorical values for the 2nd and 3rd # features enc.fit([[1, 2, 3], [0, 2, 0]])

  • 1
  • 2
  • 3
  • 4
  • 5
OneHotEncoder(categorical_features='all', dtype=, handle_unknown='error', n_values=[2, 3, 4], sparse=True)

  • 1
  • 2
  • 3
enc.transform([[1, 0, 0]]).toarray()

  • 1
array([[ 0.,1.,1.,0.,0.,1.,0.,0.,0.]])

  • 1
  • 2
【(一)sklearn数据预处理】7.遗漏值的估算
from sklearn.preprocessing import Imputer imp = Imputer(missing_values='NaN', strategy='mean', axis=0)

  • 1
  • 2
data=https://www.it610.com/article/[[1, 2], [np.nan, 3], [7, 6]]

  • 1
data

  • 1
[[1, 2], [nan, 3], [7, 6]]

  • 1
  • 2
imp.fit(data)

  • 1
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0)

  • 1
  • 2
X = [[np.nan, 2], [6, np.nan], [7, 6]]

  • 1
#用平均值去填充nan print(imp.transform(X))

  • 1
  • 2
[[ 4.2.] [ 6.3.66666667] [ 7.6.]]

  • 1
  • 2
  • 3
  • 4
8、生成多项式特征
import numpy as np from sklearn.preprocessing import PolynomialFeatures X = np.arange(6).reshape(3, 2) X

  • 1
  • 2
  • 3
  • 4
array([[0, 1], [2, 3], [4, 5]])

  • 1
  • 2
  • 3
  • 4
特征从 (X1,X2)转化为(1,X1,X2,X21,X1X2,X22).(X1,X2)转化为(1,X1,X2,X12,X1X2,X22).
poly = PolynomialFeatures(2) poly.fit_transform(X)

  • 1
  • 2
array([[1.,0.,1.,0.,0.,1.], [1.,2.,3.,4.,6.,9.], [1.,4.,5.,16.,20.,25.]])

  • 1
  • 2
  • 3
  • 4
9、自定义转换器
#np.log()、np.log10()、np.log2()、np.log1p() #分别为自然对数(e)、底数为10、底数为2、log(1+x)

  • 1
  • 2
import numpy as np from sklearn.preprocessing import FunctionTransformer transformer = FunctionTransformer(np.log1p) X = np.array([[0, 1], [2, 3]]) transformer.transform(X)

  • 1
  • 2
  • 3
  • 4
  • 5
array([[ 0.,0.69314718], [ 1.09861229,1.38629436]])

  • 1
  • 2
  • 3
def f(x): return x**2

  • 1
  • 2
transformer = FunctionTransformer(f) X = np.array([[0, 1], [2, 3]]) transformer.transform(X)

  • 1
  • 2
  • 3
array([[0, 1], [4, 9]])

    推荐阅读