数据预处理流程(Pipeline):

  • 读数据
  • 处理缺失数据
  • 解析分类数据
  • 数据集拆分
  • 特征缩放

1. 导入库

  1. import numpy as np
  2. import pandas as pd

2. 读数据(通常为csv文件)

  1. # pd.read_csv()返回类型为DataFrame
  2. dataset = pd.read_csv('data.csv')
  3. # .iloc进行按位置序号索引,此处数据为二维,.values可将其转化成numpy数组
  4. X = dataset.iloc[:, :-1].values
  5. Y = dataset.iloc[:, -1].values

3. 处理丢失数据(nan,此处X中存在nan):

利用sklearn.impute库中SimpleImputer

  1. from sklearn.impute import SimpleImputer
  2. '''
  3. 参数及默认,mean意为以该列平均值进行填充
  4. SimpleImputer(missing_values=nan, strategy='mean',fill_value=None,verbose=0,copy=True,add_indicator=False)
  5. 使用方法:定义、fit、transfrom
  6. '''
  7. # strategy默认为mean,即用平均值进行替换,此外还有:median, most_frequent, constant
  8. imputer_mean = SimpleImputer(strategy='mean', axis=0)
  9. imputer = imputer_mean.fit(X[:, 1:]) # 只能接受数值型数据,根据数据fit出应该填充的数据
  10. X[:, 1:3] = imputer.transform(X[:, 1:]) # 进行填充

4. 解析分类数据

对于分类结果,源数据常常为Yes或No,不适应计算,应将其转化为数字1或0,另外数据的部分输入属性也非数据,可转化成数据

利用sklearn.preprocessingLabelEncoder, OneHotEncoder

  1. from sklearn.preprocessing import LabelEncoder
  2. le_y = LabelEncoder()
  3. Y = le_y.fit_transform(Y) # fit_transform将fit和transform两操作结合起来
  4. '''
  5. 原本Y为
  6. ['No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'No', 'Yes', 'No', 'Yes']
  7. 转换后为
  8. [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
  9. LabelEncoder().classes_保存着两者的对应表,此处的le_y.classes_为 ['No', 'Yes']
  10. '''

5. 数据集拆分(成测试集和训练集)

利用sklearn.model_selectiontrain_test_split()

  1. from sklearn.model_selection import train_test_split
  2. X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
  3. # test_size用于设置拆分比例,0.2即20%的训练集,可增加参数shuffle,用于设置拆分前是否对数据进行混洗,默认为True,random_state设置随机数种子

6. 特征缩放

不同特征在幅度、、取值范围、单位上变化很大。计算距离时,高幅度的特征比低幅度的特征占据更大权重。

6.1 标准正态缩放

将数据缩放为均值为0,方差为1

  1. from sklearn.preprocessing import scale
  2. X_scale = scale(X_train)

6.2 标准缩放

使得数据集具有相同的均值和方差。经过fit之后可以记住训练数据的均值和方差,然后通过transform将其它数据也缩放为具有相同均值和方差的数。

  1. from sklearn.preprocessing import StandardScaler
  2. scaler = StandardScaler.fit(X_train)
  3. X_train = scaler.transform(X_train)
  4. X_test = scaler.transform(X_test)

6.3 区间缩放

将数据缩放到固定区间之类可采用MinMaxScaler