2

我目前正在开展一个项目,该项目涉及基于在多个重要层上生长的植物对地理区域进行分割(也就是说,每个分割层具有与其他层不同的含义)

在这样做的过程中,我们使用逻辑回归从区域列表、它们在每一层中所属的片段以及它们包含哪些植物,到植物在每个片段组合中生长的概率。目前,我们正在使用 SPSS,链接到分段的 C# 实现。

到目前为止,一切都很好。问题是,SPSS 在寒冷的日子里像糖蜜一样慢。对于全套(2500 个工厂和 565 个区域),单次运行大约需要半个月。那是我们没有的时间,所以现在我们正在使用缩写数据集,但即使这样也需要几个小时。

我们研究了其他具有逻辑回归的库(特别是 Accord.NET 和 Extreme Optimization),但都没有分类逻辑回归。

在这一点上,我可能应该指定分类逻辑回归的含义。鉴于我们提供给统计引擎的数据集中的每一行对于每一层都有一个变量,并且对于我们目前感兴趣的植物有一个变量,因此层变量的值被认为是类别。0 并不比 1 好或差,只是不同而已。我们想要从统计引擎中得到每个层变量的每个类别的值(当然还有截距),所以在一个层有 3 个段和一个层有 2 个段的设置中,我们会得到 5值和截距。

我应该注意到,我们已经在 Accord.NET(必须在库之外完成)和 Extreme Optimization(它有一些库内支持)中试验了虚拟变量或指标变量,但这并没有产生必要的结果。

TL;博士

所以,长话短说,有没有人知道 C# 中分类逻辑回归的好解决方案?这可以是一个类库,或者只是一个插入外部统计引擎的接口,只要它稳定且相当快。

4

2 回答 2

0

使用分类输入变量生成逻辑回归的标准方法是将分类变量转换为虚拟变量。因此,只要您对输入数据执行适当的转换,您就应该能够使用您在问题中提到的任何逻辑回归库。

从具有 n 个类别的一个分类变量到 n-1 个数字虚拟变量的映射称为对比。这篇文章进一步解释了对比是如何组合在一起的。

请注意,虚拟变量的数量比类别值的数量少 1。如果您尝试为每个类别值使用一个虚拟变量,您会发现最后一个虚拟变量并不独立于前面的虚拟变量,如果您尝试将回归模型拟合到它,您将得到错误(或无意义的系数)。

因此,以具有截距、3 级分类输入变量和 2 级分类输入变量的模型为例,ceoficient 的数量将为 1 + (3 - 1) + (2 - 1) = 4。

于 2013-03-04T07:53:00.670 回答
0

这篇文章现在早已不复存在,但如果它对其他人有帮助:您可能想要检查 SPSS 用于构建模型的计算类型。我想知道使用精确计算是否会导致需要这么长时间才能运行的东西陷入困境,类似于费舍尔的精确计算。随着类别或记录数量的增加,这些花费的时间会迅速增加。但是,如果 20% 或更多的“单元格”(分类变量的唯一组合)有 5 条或更少的记录,则需要使用类似确切方法的方法。除非您以某种方式对您的区域进行了分组,否则听起来您可能会这样做。SPSS 可能只是看到需要并自动调用该方法。无论如何都要检查一下。但实际上,如果你有足够的数据,但是它们被分成足够小的组,在一个变量组合中只有 5 个或更少,这本身就是一个问题。如果是这种情况,您可能应该看看是否有办法尽可能将类别合并和聚合在一起。如果您使用 SAS,您将使用 CONTRAST 或 EFFECT 语句在 LOGISTIC 或 GENMOD 过程中混合和匹配变量组合,直到您将其筛选为有影响力的组合。如果您使用的是 R,人们将使用的一种简单技术是为每个组合构建一个嵌套模型,并使用 ANOVA 比较它们的摘要对象,以查看哪些添加增加了预测能力。如果您必须在许多类别中测量少量并且您可以在某处访问 SAS,则可以指定第一个选项,该选项可以很好地(快速)模仿贝叶斯偏移,人们可能会使用它来抵消测量微小比例所固有的偏差。不过,好的开始是简单地查看您是否可以合并类别并确保您不会被困在进行精确计算。

关于虚拟变量等:其他海报是正确的。很多时候(特别是在学术环境中)该类别的一个级别将没有虚拟变量,并将作为参考(即信息内置于截距中)。有一种称为“效果”编码的东西,它模拟了对每个类别的单独估计,但这有点难以理解。顺便说一句,如果您有 2 层,其中一层填充了 3 只猫,而另一层只有 2 只带有数据的猫,这对我来说听起来像是 6 种组合。一个只是空的。不过,我可能只是误解了你的意思。

所以..底线,1)看看你是否被困在做一个精确的计算。2) 尝试整合到少数几个真正有影响的基本类别中。如果你要对各种影响做出有意义的陈述,你无论如何都需要它。它将使您的模型更强大,并可能使您达到不再需要精确计算的地步。

无论如何,这些都是我的想法,没有看到你的数据。

于 2019-12-11T00:27:11.383 回答