我有一个包含 9 个特征 [数字] 的原始数据集,第 10 列是分类 [国家 = 法国、德国、印度、中国、墨西哥]。 数据集有 20000 行。许多数值特征列缺少数据,并且它们不在比例中。我应该预测位于数据集第 5 列位置的特征值。
我应该如何处理它?
我应该 :
-
使用Imputer预处理整个原始数据集(对于缺少 数据),用于分类和特征比例的编码器。
-
拆分训练集和测试集中的预处理数据。
或者反过来:
- 将原始数据拆分为训练集和测试集
- 仅预处理训练集。
我感到困惑的原因:一旦我预处理原始数据集,分类列将分解为 5 个新列。那么我如何从这个数据集中剪出自变量和因变量(第 5 列)以分别生成 x 和 y 数组,我可以在这个公式中将其拆分为x_train
、x_test
、y_train
、y_test
:
from sklearn.cross_validation import train_test_split
x_train,x_test,y_train,y_test =
train_test_split(x,y,test_size=1/3,random_state=0)
据我所知,您应该首先分离数据,然后从训练集中推断出您需要应用的转换,并将其应用于训练集和验证/测试集。
原因是,如果您使用所有数据,您将获得比仅使用训练数据集(例如您更好地测量用于处理列的平均值或标准dev)的更多信息。这意味着您使用训练数据集和验证/测试数据集的提示来训练数据,这对您稍后从中得出的预测不利。这称为数据侦听或数据疏浚 (https://en.wikipedia.org/wiki/Data_dredging)。
如果您使用的是 Pandas,您可以通过提及列名而不是列位置来预处理数据。通过这种方式,您无需担心目标变量在数据集中的位置。
如果你没有使用Pandas,那么最好去掉目标变量,然后预处理数据集
对于上述两种方法,都可以对整个数据集进行预处理,也可以在将它们拆分为两个数据集后进行预处理。