机器学习代码笔记---数据预处理


 

数据预处理?

将数据预处理分解为 6 ??个基本步骤。从此处获取本示例中使用的数据集

 

Step 1: 导入库?

In [ ]:
import numpy as np
import pandas as pd
 

Step 2: 倒入数据集?

In [ ]:
dataset = pd.read_csv('./data/Data.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
print(X)
print(Y)
 
[['France' 44.0 72000.0]
 ['Spain' 27.0 48000.0]
 ['Germany' 30.0 54000.0]
 ['Spain' 38.0 61000.0]
 ['Germany' 40.0 nan]
 ['France' 35.0 58000.0]
 ['Spain' nan 52000.0]
 ['France' 48.0 79000.0]
 ['Germany' 50.0 83000.0]
 ['France' 37.0 67000.0]]
['No' 'Yes' 'No' 'No' 'Yes' 'Yes' 'No' 'Yes' 'No' 'Yes']
 

Step 3: 处理丢失数据?

In [ ]:
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values = np.NAN, strategy = "mean")
X[ : , 1:3] = imputer.fit_transform(X[ : , 1:3])
 

遗弃用法

In [ ]:
import sklearn
from sklearn.preprocessing import Imputer
print(sklearn.__version__)
import warnings
warnings.filterwarnings("ignore")

# Imputer 在 sklearn 0.20以上版本中被 impute.SimpleImputer 取代

imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
 
0.21.2
 

Step 4: 编码分类数据?

In [ ]:
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
 

创建虚拟变量?

In [ ]:
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y =  labelencoder_Y.fit_transform(Y)
 

Step 5: 将数据集分为训练集和测试集?

In [ ]:
from sklearn.model_selection import train_test_split

X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)
 

Step 6: 特征缩放?

In [ ]:
from sklearn.preprocessing import StandardScaler

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
 

特征处理总结?

  1. 首先要明确有多少特征,哪些是连续的,哪些是类别的。
  2. 检查有没有缺失值,对确实的特征选择恰当方式进行弥补,使数据完整。
  3. 对连续的数值型特征进行标准化,使得均值为0,方差为1。
  4. 对类别型的特征进行one-hot编码。
  5. 将需要转换成类别型数据的连续型数据进行二值化。
  6. 为防止过拟合或者其他原因,选择是否要将数据进行正则化。
  7. 在对数据进行初探之后发现效果不佳,可以尝试使用多项式方法,寻找非线性的关系。
  8. 根据实际问题分析是否需要对特征进行相应的函数转换。
 

参考?

100-Days-Of-ML-Code