【发布时间】:2014-03-30 01:58:44
【问题描述】:
短版:我在一些数据上使用了 scikit LinearRegression,但我习惯了 p 值,所以将数据放入 statsmodels OLS,虽然 R^2 是关于同样,变量系数都相差很大。这让我很担心,因为最可能的问题是我在某处犯了错误,现在我对任何一个输出都没有信心(因为我可能错误地制作了一个模型,但不知道是哪一个)。
加长版:因为我不知道问题出在哪里,所以我不知道具体要包含哪些细节,而且包含所有内容可能太多了。我也不确定是否包含代码或数据。
我的印象是scikit的LR和statsmodels OLS都应该做OLS,据我所知OLS就是OLS所以结果应该是一样的。
对于 scikit 的 LR,无论我设置 normalize=True 还是 =False,结果(统计上)都是相同的,我觉得这有点奇怪。
对于 statsmodels OLS,我使用来自 sklearn 的 StandardScaler 对数据进行标准化。我添加了一列,因此它包含一个截距(因为 scikit 的输出包含一个截距)。更多信息在这里:http://statsmodels.sourceforge.net/devel/examples/generated/example_ols.html(添加此列并未将变量系数更改为任何显着程度,并且截距非常接近于零。)StandardScaler 不喜欢我的整数不是浮点数,所以我尝试了这个: https://github.com/scikit-learn/scikit-learn/issues/1709 这会使警告消失,但结果完全相同。
当然,我在 sklearn 方法中使用了 5 倍 cv(R^2 每次对于测试和训练数据都是一致的),而对于 statsmodels,我只是将所有数据都扔掉。
对于 sklearn 和 statsmodels,R^2 约为 0.41(这对社会科学有好处)。这可能是个好兆头,也可能只是巧合。
这些数据是对《魔兽世界》中化身的观察(来自http://mmnet.iis.sinica.edu.tw/dl/wowah/),我打算每周制作一些不同的功能。最初这是一个数据科学课程的课程项目。
自变量包括一周内的观察次数 (int)、角色级别 (int)、是否在公会 (Boolean)、何时被看到 (Booleans on weekday day, weekday eve, weekday late, and the same 三个为周末),字符类的一个dummy(在数据收集时,WoW中只有8个类,所以有7个dummy vars并且删除了原始字符串分类变量)等。
因变量是每个角色在该周内获得了多少级别(整数)。
有趣的是,类似变量中的一些相对顺序在 statsmodels 和 sklearn 中保持不变。因此,“当看到时”的排名顺序是相同的,尽管负载非常不同,而角色类假人的排名顺序是相同的,尽管负载又是非常不同的。
我觉得这个问题和这个问题差不多:Difference in Python statsmodels OLS and R's lm
我在 Python 和统计方面足够好,可以尝试一下,但还不足以解决这样的问题。我尝试阅读 sklearn 文档和 statsmodels 文档,但如果答案就在眼前,我不明白。
我很想知道:
- 哪个输出可能是准确的? (当然,如果我错过了一个 kwarg,他们可能都是。)
- 如果我犯了错误,这是什么错误以及如何解决?
- 我能不在这里问就知道这一点吗?如果可以,怎么办?
我知道这个问题有一些相当模糊的位(没有代码,没有数据,没有输出),但我认为它更多的是关于两个包的一般过程。当然,一个似乎是更多的统计数据,一个似乎是更多的机器学习,但它们都是 OLS,所以我不明白为什么输出不一样。
(我什至尝试了其他一些 OLS 调用来进行三角测量,其中一个给出了低得多的 R^2,一个循环了 5 分钟然后我杀死了它,一个崩溃了。)
谢谢!
【问题讨论】:
-
你能在一个小的输入上复制你的问题吗?如果是这样,您可以在此处发布输入和您的代码吗?
-
只有一种可能性:您检查了解释变量矩阵的等级吗?会不会是单数?但是,如果没有更明确的示例,很难说出可能导致差异的原因。
-
啊,好吧——明天(美国东部时间)我会看看我是否可以用这些东西来改进 q。我担心我无法针对这个案例提出正确的具体问题。
-
一种可能性是您生成一些随机数据并使用它运行您的程序,看看您是否得到相同的差异。通过这种方式,您可以查看是数据问题还是 statsmodels 与 scikit-learn 的使用问题。
-
哦,这也是个好主意!顺便说一句,我不确定“解释变量矩阵的等级”是什么意思。我的统计数据都陈旧而生疏,机器学习方面的东西似乎使用不同的名称,方法也有点不同,所以我有时会在命名法上苦苦挣扎。
标签: python scikit-learn linear-regression statsmodels