关于提升机器学习算法做预测回归任务精度的方法分享
1. 问题的来源
目前做过一些小数据集(100-1000)的预测任务,经常会出现一个问题:拿到数据后,写完模型代码,然后运行测试,发现R2很低,MAE之类的指标也很高。
这个时候,会发现:单纯调整模型参数并不能提高模型精度。
而这个问题,就是今天想要探讨的问题。
2. 方法分享
这里仅分享我自己目前能够想到的方法,如果大家还有其他方法,欢迎补充在评论区,让后来的人可以少走一些弯路。
我觉得这个问题出现的根本原因在于:数据集。现在很认可一句话,做这种机器学习的工作,80%的时间都在处理数据,20%的时间在调参和写代码。
比如,我现在有一个700条的数据集,但是只有5个特征,其中一个还是目标变量。这个时候,即使数据量看着还不错,但4个特征所包含的信息有限,模型训练后的泛化能力大概率很弱,除非你的数据隐含的关系非常简单,不然大概率R2都非常低。
意识到“模型本质学的是数据的信息”,当你数据包含的信息越多的时候,模型自然能够学习到的东西也越多,最终的泛化能力自然也就越高。
因此,提高精度的本质是提高数据信息量,体现在具体方法有如下:
- 新增物理特征:纯数学特征可能效果不好,或者存在天花板。可以引入一些更具有物理意义的复合特征。本质上来说是增加信息含量,因为单纯的数字可能包含的信息有限,因此需要人为增加信息量。
- 去除某些杂糅信息特征:有的时候,并不是越多信息越好,有的信息如果本身是噪声与没有意义的特征,可以抛去尝试,看看效果如何,如果没有提升或者减弱了再加上即可。
- 构建新的目标变量:有的时候,原本的目标变量可能区分度不够或者其他原因,可以构建出新的目标变量,更具辨识度(比如对数化处理,注意训练前对数化,预测的时候要将预测输出的还原,然后进行模型的评估)
- 聚类公共数据点:把一些具有类似特征的数据聚类在一块,相当于新增了数据列,具有更多信息和辨识度
- 明确上限与优先性:如果特征数很少、数据量小,有的时候的确预测效果存在一定上限,难以准确预测;如果存在多个数据集的时候(数据集的数据大小由少变多),优先调整数据大的,明确最优结果,才能去评价其他相对更差的结果。
- 删除数据异常点:如果目标变量具有物理意义,比如输入的是总重量,预测的是长途过程中损失后的最终重量,如果目标变量(即最终重量)比总重量还大,或者小特别多,可以标记为异常数据而去掉。当然,是否去掉还是要根据业务场景来判断。
3. 补充
关于派生特征的构造:
- 任务是有领域的,有的时候可以根据领域知识进行构建,比如将某两个特征相加或者相除,得到总的量或者比例之类的特征
- 听从AI的建议,AI的知识库很丰富,常见的简单新特征构建,它基本都可以给出建议
根据我自己的尝试:新增特征是最有用的手段了,如改变目标变量等方法效果不是确定,偶尔能提升,偶尔也会变差。