深度学习常用数据操作总结——数据预处理

深度学习采用的数据全部以张量的形式存储在内存中,然而我们拿到手的原始数据却不是张量形式,因此需要首先对数据进行处理,将其转换为张量形式,可以采用Python中的Pandas包来完成。

读取数据集

1
2
3
4
import pandas as pd

data = pd.read_csv(data_file)
print(data)

NumRooms Alley Price 0 NaN Pave 127500 1 2.0 NaN 106000 2 4.0 NaN 178100 3 NaN NaN 140000

此处可以调用head等函数查看读取的数据集,或者直接用print函数

处理缺失值

如果数据集中某行某字段的值缺失,输出时会标识为”NaN”,缺失值会对后续处理造成影响,因此需要对缺失数据进行处理,典型的方法包括插值法和删除法。插值法是用一个替代值弥补缺失值,删除法则是直接忽略缺失值。此处以插值法为例

1
2
3
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

NumRooms Alley 0 3.0 Pave 1 2.0 NaN 2 4.0 NaN 3 3.0 NaN

通过位置索引函数,可以将数据分为inputs和outputs,缺失值用同一列的均值填充。需要注意的是此处填充的为数值型的值,即连续值,对于inputs中的类别值或者离散值,可以将”NaN“视为一个类别,调用get_dummies函数可以将同一离散值列按照取值不同拆分为不同的列并用0,1标示取值。例如

1
2
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

NumRooms Alley_Pave Alley_nan 0 3.0 1 0 1 2.0 0 1 2 4.0 0 1 3 3.0 0 1

转换为张量格式

通过缺失值处理将原数据集中的缺失值补充完整,并将输入输出放入dataFrame中,接下来将其转换为张量,转换为张量后可以进行进一步操作。

1
2
3
from mxnet import np

X, y = np.array(inputs.values), np.array(outputs.values)