我有一个更多的概念性问题,我希望得到一些反馈。我试图运行一个增强回归ML模型,以确定一个重要的预测子集的一些临床条件。该数据集包含超过100000行,并有近1000个预测器。现在,我们试图预测的疾病的病因在很大程度上尚不清楚。因此,我们可能没有关于这种情况的许多重要预测因素的数据。也就是说,作为一个预测模型,我想出的任何模型都很难预测结果。然而,这里的主要目的并不是预测,而是确定重要的变量,然后我们可以在未来的分析中更直接地针对这些变量。因此,我试图使用ML模型作为变量选择工具。
通常,我们可以通过在新的数据集上评估其度量来了解模型的性能--例如,使用嵌套交叉验证或火车测试拆分。但是,与其评估模型的度量,我在这里的主要兴趣是评估选择不同预测器的一致性(即特性重要性列表的一致性)。从本质上说,我想要做的是随机分割数据库(比如使用60%的数据),运行CV来调优超参数,然后使用最好的超参数将模型训练成完整的60%,得到特性的重要性。然后,我会重复相同的过程X次,每次使用不同的随机选择60%的样本。这将给我X个重要的特性表,每次运行一个。但是,是否有一种方法可以以某种方式“合并”所有这些特性重要性表,以了解不同运行期间的选择过程有多稳定?还是有更好的方法来做到这一点?非常感谢!
发布于 2021-08-04 13:37:58
这是一个有趣的问题,也没有一个“一刀切”的答案。如果我把你的问题分为两个主要部分,我会说:
重要变量的选择
Boruta是我经常使用的(请读这里)。之一--我已经说过了,您可以始终使用来自sklearn的编程。因此,我相信你肯定会明白,在你进行任何ML建模之前,这都是预建模。一旦你了解了变量有多重要,在多大程度上,我会把ML限制在前100位呢?这将为你节省大量的时间和精力。
毫升建模
我喜欢你在火车测试中的做法,事实上,这是我大部分时间所做的。您可以在每次运行模型时定义一个dataframe来保存来自ML模型的重要性度量,并将新的度量附加到模型中。这样,在20轮建模结束时,您将对每个variable有20个度量,然后您可以对其进行平均和排序。
整个过程应该让您知道哪些变量是真正重要的,然后我将进入“超参数优化”之后,我已经知道了使用哪些变量。
发布于 2021-08-04 17:15:03
1.)如果您的目标是找到最相关的特性,那么首先要做的就是使用领域知识进行特性工程。这是最有效的特征选择技术,在正确的做法,不需要任何额外的特征选择技术。
2.)在完成上述步骤之后,如果您希望获得目标特性的“重要性”,可以使用mutual_info_regression。它将在一步内给出您所有功能的重要值!此外,它还可以测量与目标的“任何类型的关系”(不只是像某些技术那样的线性关系)。
3.)如果您进一步想要进行特性选择,您可以尝试一种基于包装的技术,如RFECV、前后向选择技术等等。就我个人而言,我将使用RFECV!
我想说的是,集中你的精力在第一步,因为它肯定会给你最好的结果。
https://datascience.stackexchange.com/questions/97980
复制相似问题