为线性回归选择输入变量以获得更高的准确性

数据挖掘 Python scikit-学习 线性回归
2022-02-25 08:51:02

我有一个描述河流水位的数据集。它具有以下属性:

Value                   float64
Variable Name            object
Variable Unit Code       object
Date Pulled              object
Site Code                 int64
Site Latitude           float64
Site Longitude          float64
Site Name                object

我正在使用线性回归来尝试预测Valueusing Site Code但得到的结果与实际值相去甚远Site LongitudeSite Latitude我想知道是我选择的自变量导致了这个问题,还是我应该尝试其他类型的回归?如果是第一种情况,推荐使用哪种方法来获得更高的准确率或更精确,如果相关自变量不多该怎么办?

2个回答

我正在使用线性回归来尝试使用站点代码、站点经度和站点纬度来预测值

不幸的是,这三个变量都不能直接进入线性回归。

Site Code看起来像一个数值变量,但它实际上是分类的。例如Site Code = 10,可能与 正交Site Code = 5,并且不应被解释为两倍重要。处理这个问题的正确方法是为每个可能的站点代码创建一个布尔虚拟指标变量。您也可以将此方法用于其他一些object似乎也是分类的变量。

Latitude并且Longitude在线性回归中效果不佳,因为它们的关系是高度非线性的。例如,两个点可以具有相同的纬度/经度,但相距很远。一种典型的方法是将对转换(lat,lng)为预定义的区域,并将区域视为分类变量。

您拥有的最后一种变量是date. 您可以将其直接转换为分类变量,但最好只花一个月时间来减少类别数量并更好地概括季节性影响。

虽然总是希望有更多信息变量来构建模型,但实际上,也许就像你的情况一样,我们必须忍受我们所拥有的。虽然,如果我是你,我会考虑挖掘与水位相关的其他外部数据,如地理数据、气候(应该有很多东西可以添加到当前的特征空间中)。无论如何,您目前的情况,我有根据的猜测是,简单的回归无论如何都不是一个好的模型选择。简单地说,它不会捕获适合预测的自变量和因变量之间的任何非线性相关性,即河流的水位。

我强烈建议,如果您想构建一个更好的预测模型,希望其性能比简单回归更好,并且仍然快速简单,可以使用LightGBMXGBoost或最近我最喜欢的 Catboost实现来使用梯度提升决策树 (GBDT) (否则你也可以考虑神经网络,但取决于你有多少数据等)。每个都有自己的优点和缺点,请查看Mateusz Susikin 在 2017 年 PyData 会议上的精彩视频,了解它们之间的一些差异。

请注意,在构建 GBDT 模型时,您需要注意如何对分类变量进行编码,尤其是如何包含独立连续变量(如果存在)。请浏览这些stackexchange post1post2,我将在其中讨论处理它们的方法,或者至少它们可能会给您一些提示。