有个叫 Avik Jain 的老外在 github 上发起了一个 100 天学习机器学习的项目, 每天花一个小时学习机器学习, 学习内容由浅入深. 今天是第一天, 内容是如何进行数据预处理. 该教程的编程语言是 Python.
数据预处理分为 6 步:
第一步: 导入 NumPy 和 Pandas 库. NumPy 和 Pandas 是每次都要导入的库, 其中 Numpy 包含了数学计算函数, Pnadas 是一个用于导入和管理数据集 (Data Sets) 的类库.
第二步: 导入数据集. 数据集一般都是. csv 格式, csv 文件以文本形式存储数据. 每一行数据是一条记录. 我们使用 pandas 类库的 read_csv 方法读取本地的 csv 文件作为一个 dataframe. 然后从 datafram 中分别创建自变量和因变量的矩阵和向量.
第三步: 处理缺失的数据. 我们得到的数据很少是完整的. 数据可能因为各种原因丢失, 为了不降低机器学习模型的性能, 需要处理数据. 我们可以用整列的平均值或者中间值替换丢失的数据. 我们用 sklearn.preprocessing 库中的 Inputer 类完成这项任务.
第四步: 对分类数据进行编码. 分类数据指的是含有标签值而不是数字值得变量. 取值范围通常是固定的. 例如 "YES" 和 "NO" 不能用于模型的数学计算, 所以需要编码成数字. 为数显这一功能, 我们从 sklearn.preprocessing 库中导入 LabelEncoder 类.
第五步: 拆分数据集为测试集合和训练集合. 把数据集拆分成两个, 一个是用来训练模型的训练集合, 另一个是用来验证模型的测试集合. 两种比例一般是 80:20. 我们导入 sklearn.crossvalidation 库中的 train_test_split()方法.
第六步: 特征缩放. 大部分模型算法使用两点间的欧式近距离表示, 但此特征在幅度, 单位和范围姿态问题上变化很大. 在距离计算中, 高幅度的特征比低幅度特征权重大. 可用特征标准化或 Z 值归一化解决. 导入 sklearn.preprocessing 库的 StandardScalar 类.
代码如下:
1: 导入类库
- import numpy as np
- import pandas as pd
2: 导入数据集
- dataset = pd.read_csv('Data.csv')
- X = dataset.iloc[ : , :-1].values
- Y = dataset.iloc[ : , 3].values
3: 处理缺失的数据
- from sklearn.preprocessing import Imputer
- imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
- imputer = imputer.fit(X[ : , 1:3])
- X[ : , 1:3] = imputer.transform(X[ : , 1:3])
Step 4: 编码分类数据
- from sklearn.preprocessing import LabelEncoder, OneHotEncoder
- labelencoder_X = LabelEncoder()
- X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
- Creating a dummy variable
- onehotencoder = OneHotEncoder(categorical_features = [0])
- X = onehotencoder.fit_transform(X).toarray()
- labelencoder_Y = LabelEncoder()
- Y = labelencoder_Y.fit_transform(Y)
Step 5: 切分数据集成训练数据和测试数据
- from sklearn.cross_validation 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: 特征缩放
- from sklearn.preprocessing import StandardScaler
- sc_X = StandardScaler()
- X_train = sc_X.fit_transform(X_train)
- X_test = sc_X.fit_transform(X_test)
来源: https://www.cnblogs.com/airnew/p/9638093.html