python - 机器学习中测试集需要数据清理吗?

标签 python machine-learning feature-selection kaggle

我正在进行一个关于纽约出租车数据(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/

相关文章:

Python 参数解析 : list individual choices in the usage

python - 避免 __getattribute__ 中的无限循环

machine-learning - 何时应用特征选择

python - 可训练的多参数事件。函数 (RBF) NeuPy/Theano

python - Okapi BM25的python实现

r - R中的Boruta箱形图

Python 子进程超时终止

python - 如何根据其值的频率将行转换为列

tensorflow - 如何修复图像识别中的错误猜测

python - 将 caffe 与 c++ 或 python 连接时出现问题