机器学习中的测试集是否需要数据清洗?

我正在进行一个关于纽约市出租车数据的有趣的机器学习项目(https://s3.amazonaws.com/nyc-tlc/trip+data/green_tripdata_2017-04.csv),目标是预测小费金额,原始数据看起来像(2个数据样本):

   VendorID lpep_pickup_datetime lpep_dropoff_datetime store_and_fwd_flag  \0         2  2017-04-01 00:03:54   2017-04-01 00:20:51                  N   1         2  2017-04-01 00:00:29   2017-04-01 00:02:44                  N      RatecodeID  PULocationID  DOLocationID  passenger_count  trip_distance  \0           1            25            14                1           5.29   1           1           263            75                1           0.76      fare_amount  extra  mta_tax  tip_amount  tolls_amount  ehail_fee  \0         18.5    0.5      0.5        1.00           0.0        NaN   1          4.5    0.5      0.5        1.45           0.0        NaN      improvement_surcharge  total_amount  payment_type  trip_type  0                    0.3         20.80             1        1.0  1                    0.3          7.25             1        1.0  

有五种不同的’payment_type’,用数字1,2,3,4,5表示

我发现只有当’payment_type’为1时,’tip_amount’才有意义,’payment_type’为2,3,4,5时小费都为零:

for i in range(1,6):    print(raw[raw["payment_type"] == i][['tip_amount', 'payment_type']].head(2))

得到的结果是:

   tip_amount  payment_type0        1.00             11        1.45             1   tip_amount  payment_type5         0.0             28         0.0             2     tip_amount  payment_type100         0.0             3513         0.0             3     tip_amount  payment_type59          0.0             4102         0.0             4       tip_amount  payment_type46656         0.0             553090         0.0             5

第一个问题:我想为’tip_amount’构建一个回归模型,如果我使用’payment_type’作为特征,模型能自动处理这种行为吗?

第二个问题:我们知道对于’payment_type’为2,3,4,5时,’tip_amount’实际上并非零,只是没有正确记录,如果我删除这些数据样本,只保留’payment_type’等于1的数据,那么在使用模型预测未见过的测试数据集时,就无法预测’payment_type’为2,3,4,5时的零小费,所以我必须保留’payment_type’作为重要特征,对吗?

第三个问题:假设我保留所有不同’payment_type’的数据样本,并且模型能够预测’payment_type’为2,3,4,5时的零小费金额,但这是我们真正想要的吗?因为真实的小费不应该是零,只是数据显示如此。


回答:

机器学习中的一个常见说法是,输入垃圾,输出垃圾。通常,特征选择和数据预处理比模型架构更为重要。

第一个问题:

是的

第二个问题:

由于’payment_type’为2, 3, 4, 5时都结果为0,为什么不简单处理呢?将所有不是1的支付类型替换为0。这将让你的模型更容易将1关联为已支付,0关联为未支付。这也减少了模型在未来需要学习的内容量。

第三个问题:

如果数据中没有反映出“真实的小费”,那么你的模型根本无法学习到这一点。无论这种对真实情况的不准确表述是我们想要的还是不想要的,这是你需要做出的决定。理想情况下,你应该有显示实际小费的数据。

数据预处理非常重要,将极大地帮助你的模型。除了对你的’payment_type’特征进行一些更改外,你还应该考虑对数据进行归一化,这将帮助你的机器学习算法更好地概括数据之间的关系。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注