分类Logistic回归,库

时间:2011-04-14 20:35:04

标签: c# regression

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

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

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

我们通过逻辑回归(特别是Accord.NET和极端优化)研究了其他库,但都没有分类逻辑回归。

此时我应该通过分类逻辑回归来指出我的意思。假设我们提供的数据集中的每一行统计引擎都有一个变量用于每一层,而一个用于我们目前感兴趣的工厂,则层变量的值被视为类别。 0并不比1更好或更差,它只是不同。我们想要从统计引擎中得到的是每个图层变量的每个类别的值(当然还有截距),因此在具有3个分段和1个具有2个分段的图层的设置中,我们得到5值和截距。

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

TL; DR

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

2 个答案:

答案 0 :(得分:0)

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

从具有n个类别的一个分类变量到n-1个数字虚拟变量的映射称为对比度。 This post对如何对比进行了进一步的解释。

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

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

答案 1 :(得分:0)

到目前为止,该帖子已经消失了,但是如果它可以帮助其他人: 您可能要检查SPSS用于构建模型的计算类型。我想知道是否需要使用费舍尔的精确计算方法来拖延长时间运行的时间。随着类别或记录数量的增加,这些花费的时间迅速增加。但是,如果20%或更多的“单元格”(分类变量的唯一组合)具有5条或更少的记录,则需要使用诸如精确方法之类的方法。除非您以某种方式对区域进行了分组,否则听起来您可能会陷入困境。 SPSS可能只是看到需求并自动调用该方法。还是要检查的东西。实际上,如果您有足够的数据,但是将它们分成足够小的组,以使单个变量组合中的数目不超过5个,这本身就是一个问题。在这种情况下,您可能应该查看是否有可能的方式将类别合并在一起。如果您使用的是SAS,则可以使用CONTRAST或EFFECT语句在LOGISTIC或GENMOD进程内混合和匹配变量组合,直到将其筛选成有意义的组合。如果您使用的是R,人们将使用的一种简单技术是为每种组合构建一个嵌套模型,并使用ANOVA比较其汇总对象,以查看哪些添加项可以增加预测能力。如果您必须在许多类别中测量少量零件并且可以在某个地方使用SAS,则可以指定第一个选项,该选项可以很好地(快速)模仿贝叶斯偏移量,该偏移量可以用来抵消测量微小比例所固有的偏差。好的开端只是简单地查看是否可以合并类别,并确保您不会被困进行精确的计算。

关于伪变量等:其他张贴者是正确的。很多时候(尤其是在学术环境中),该类别的一个级别不会提供虚拟变量,而是作为参考(即信息内置在拦截器中)。有一种叫做“效​​果”编码的东西,它模仿每个类别的单独估计,但这很难使您的头脑变得清醒些。顺便说一句,如果您有2层,其中一层填充了3只猫,另一层只有2只包含数据的猫,这对我来说听起来像6种组合。一个只是空的。不过,我可能只是误解了您的意思。

..底线,1)看看您是否在进行精确的计算时遇到困难。 2)尝试合并为实际上具有影响力的几个基本类别。无论如何,如果要对各种效果做出有意义的陈述,都需要这样做。这将使您的模型更强大,并可能使您到达一个不再需要精确计算的地步。

无论如何,这些都是我的想法,