我正在进行一个关于纽约出租车数据(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_type
0 1.00 1
1 1.45 1
tip_amount payment_type
5 0.0 2
8 0.0 2
tip_amount payment_type
100 0.0 3
513 0.0 3
tip_amount payment_type
59 0.0 4
102 0.0 4
tip_amount payment_type
46656 0.0 5
53090 0.0 5
第一个问题:我想为“tip_amount”建立一个回归模型,如果我使用“payment_type”作为特征,模型可以自动处理这种行为吗?
第二个问题:如果我删除这些数据样本并只保留“payment_type”==,我们知道“payment_type” 2,3,4,5 的“tip_amount”实际上不为零,只是没有正确记录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 与未付款相关联。它还减少了模型将来必须学习的东西的数量。
第三个问题:
如果“潜在的真实提示”没有反射(reflect)在数据中,那么你的模型根本不可能学习它。这种对事实的不准确表述是否是我们想要的,取决于您的决定。理想情况下,您将拥有显示实际小费的数据。
预处理数据非常重要,将对您的模型有很大帮助。除了对 payment_type 功能进行一些更改之外,您还应该考虑对数据进行标准化,这将有助于您的机器学习算法更好地概括数据之间的关系。
关于python - 机器学习中测试集需要数据清理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49703296/