当前位置: 首页 > 面试题库 >

OLS回归:Scikit与Statsmodels?

冉高寒
2023-03-14
问题内容

简短版本 :我在某些数据上使用了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模型和stats模型,R ^ 2约为0.41(这对社会科学是有益的)。这可能是一个好兆头,也可能只是一个巧合。

数据是《魔兽世界》中化身的观察结果(来自http://mmnet.iis.sinica.edu.tw/dl/wowah/),我想将其每周化作一些不同的功能。最初,这是一个数据科学课程的课程项目。

自变量包括公会中的观察次数(int),字符级别(int)(如果在公会中则为布尔值)(布尔值),看到时(工作日,周日前夜,工作日晚和周三的布尔值,周末相同)。字符类的虚拟对象(在数据收集时,WoW中只有8个类,因此有7个虚拟变量,并且删除了原始的字符串分类变量),以及其他。

因变量是每个字符在该周内获得多少级别(int)。

有趣的是,类似变量内的某些相对顺序在statsmodels和sklearn中保持不变。因此,尽管加载有很大的不同,但是“看时”的等级顺序是相同的,尽管加载有很大的不同,但角色类假人的等级顺序是相同的。

我认为这个问题与此类似:Python statsmodels
OLS和R的lm的区别

我擅长使用Python和统计数据,但还不足以解决类似问题。我试着阅读sklearn文档和statsmodels文档,但是如果答案在那里,我的脸不知所措。

我愿意知道:

  1. 哪个输出可能是准确的?(当然,如果我错过矮人的话,他们俩可能都是。)
  2. 如果我犯了一个错误,那是什么以及如何解决?
  3. 我能在不问这里的情况下解决这个问题吗?

我知道这个问题有些模糊(没有代码,没有数据,没有输出),但是我认为这更多地是关于这两个软件包的一般过程。当然,一个似乎更多的统计数据,一个似乎更多的机器学习数据,但是它们都是OLS,因此我不明白为什么输出不一样。

(我什至尝试了其他一些OLS调用来进行三角测量,一个给出的R ^ 2低得多,一个循环了五分钟,我杀死了它,一个崩溃了。)

谢谢!


问题答案:

听起来您没有X向两个过程提供相同的回归矩阵(但请参见下文)。这是一个示例,向您显示需要为sklearn和statsmodel使用哪些选项才能产生相同的结果。

import numpy as np
import statsmodels.api as sm
from sklearn.linear_model import LinearRegression

# Generate artificial data (2 regressors + constant)
nobs = 100 
X = np.random.random((nobs, 2)) 
X = sm.add_constant(X)
beta = [1, .1, .5] 
e = np.random.random(nobs)
y = np.dot(X, beta) + e

# Fit regression model
sm.OLS(y, X).fit().params
>> array([ 1.4507724 ,  0.08612654,  0.60129898])

LinearRegression(fit_intercept=False).fit(X, y).coef_
>> array([ 1.4507724 ,  0.08612654,  0.60129898])

正如评论者所建议的那样,即使您给两个程序相同的X,X可能也没有完整的列排名,并且它们的sm /
sk可能在后台采取了(不同的)动作来使OLS计算得以通过(即删除不同的列)。

我建议您使用pandaspatsy注意以下事项:

import pandas as pd
from patsy import dmatrices

dat = pd.read_csv('wow.csv')
y, X = dmatrices('levels ~ week + character + guild', data=dat)

或者,可以使用statsmodels公式界面:

import statsmodels.formula.api as smf
dat = pd.read_csv('wow.csv')
mod = smf.ols('levels ~ week + character + guild', data=dat).fit()

编辑:此示例可能有用:http
:
//statsmodels.sourceforge.net/devel/example_formulas.html



 类似资料:
  • 我有一个数据框,我希望能够根据B列和C列中的值预测a列的值。下面是一个玩具示例: 理想情况下,我会有类似于的东西,但当我查看算法库中的示例时,比如,它似乎会使用行列表而不是列将数据提供给模型。这需要我将数据重新格式化为列表中的列表,这似乎违背了最初使用熊猫的目的。对熊猫数据帧中的数据运行OLS回归(或更普遍的任何机器学习算法)的最具python风格的方式是什么?

  • 我正在使用scikit-learn,并且希望使用RBF内核运行SVR。我的数据集相当大,所以从阅读其他帖子,我被建议使用SGD回归和RBF近似。有趣的是,与仅仅使用SGD本身相比,使用RBF的SGD会得到更差的结果。我想这可能是由于错误的参数值。我尝试了RBF采样器的gamma和n_components循环,并尝试了SGD regessor的一些参数,但没有结果。我还输出了训练和交叉验证错误,两者

  • 二类分类问题 逻辑回归最广泛的应用就是二类分类,我们以脏话判别为例来利用逻辑回归,对一句话做脏话分析判断 输入样本如下: 是脏话:fuck you 是脏话:fuck you all 不是脏话:hello everyone 我们来预测以下两句话是否是脏话: fuck me hello boy # coding:utf-8 import sys reload(sys) sys.setdefault

  • 本文向大家介绍scikit-learn线性回归,多元回归,多项式回归的实现,包括了scikit-learn线性回归,多元回归,多项式回归的实现的使用技巧和注意事项,需要的朋友参考一下 匹萨的直径与价格的数据 训练模型 预测一张12英寸匹萨价格:$13.68 一元线性回归假设解释变量和响应变量之间存在线性关系;这个线性模型所构成的空间是一个超平面(hyperplane)。 超平面是n维欧氏空间中余维

  • 我正在使用statsmodels的OLS线性回归和Patsy四次公式,但得到的回归与LibreOffice Calc的数据相比不太吻合。为什么这与LibreOffice Calc的结果不匹配? STATSAMDELS代码: 生成以下系数: 和下面的图表: 但是,如果我将数据放入LibreOffice Calc,请单击绘图并选择“插入趋势线…”,选择“多项式”,输入“度”=4,然后选择“显示方程”,

  • 住房价格样本 样本 面积(平方米) 价格(万元) 样本 面积(平方米)  价格(万元) 1 50 150 2 100 200 3 150 250 4 200 280 5 250 310 6 300 330 做图像 # coding:utf-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) import matplotlib.py

  • 本文向大家介绍Python scikit-learn 做线性回归的示例代码,包括了Python scikit-learn 做线性回归的示例代码的使用技巧和注意事项,需要的朋友参考一下 一、概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首挺胸脱口而出。当然了,算法之林虽大,但能者还是有限,能适应某些环境并取得较

  • 多元线性回归模型 方程:Y=Xβ  求解多元线性回归问题就是求解β: 因为X不一定是方阵,所以不能直接β=X-1Y 两边同时乘以Xt,得到XtY=XtXβ 因为XtX是方阵,它的逆是(XtX)-1,所以两边同时乘(XtX)-1得到 (XtX)-1XtY=β 根据这个公式,我们自己设计一个例子,验证一下 设计二元一次方程:y=1+2x1+3x2 取样本为(1,1,1),(1,1,2),(1,2,1)