【问题标题】:Difference between statsmodel OLS and scikit linear regression; different models give different r squarestatsmodel OLS和scikit线性回归的区别;不同的模型给出不同的r平方
【发布时间】:2017-05-20 15:00:12
【问题描述】:

我是 python 新手,正在尝试计算简单的线性回归。我的模型有一个因变量和一个自变量。我正在使用 sklearn 包中的 linear_model.LinearRegression() 。我的 R 平方值为 0.16 然后我使用 import statsmodels.api as sm mod = sm.OLS(Y_train,X_train) 我得到了一个 0.61 的 R 平方。下面是从大查询中获取数据开始的代码

****Code for linear regression**** 
    train_data_df = pd.read_gbq(query,project_id)
    train_data_df.head()

    X_train = train_data_df.revisit_next_day_rate[:, np.newaxis]
    Y_train = train_data_df.demand_1yr_per_new_member[:, np.newaxis]

#scikit-learn version to get prediction R2
    model_sci = linear_model.LinearRegression()
    model_sci.fit(X_train, Y_train)


    print model_sci.intercept_
    print ('Coefficients: \n', model_sci.coef_)
    print("Residual sum of squares %.2f"
         % np.mean((model_sci.predict(X_train) - Y_train ** 2)))
    print ('Variance score: %.2f' %model_sci.score(X_train, Y_train))
    Y_train_predict = model_sci.predict(X_train)
    print ('R Square', r2_score(Y_train,Y_train_predict) )


****for OLM****

    print Y_train[:3]
    print X_train[:3]
    mod = sm.OLS(Y_train,X_train)
    res = mod.fit()
    print res.summary()

我对此很陌生。试图了解我应该使用哪个线性回归包?

【问题讨论】:

  • 你需要向我们展示你实际做了什么,否则怎么会有人说你做错了什么?
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。
  • @juanpa.arrivillaga 我已经编辑了问题以添加代码。
  • 所以你知道,sklearn 的LinearRegression 默认适合截取词,而sm.OLS 不适合。
  • 有没有办法让 OLS 适应拦截?

标签: python linear-regression statsmodels sklearn-pandas


【解决方案1】:

找出不同之处。这是拦截。 OLS 默认不接受它。所以通过添加下面的代码来匹配答案。

X = sm.add_constant(X)
sm.OLS(y,X)

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2015-12-12
    • 2016-10-23
    • 2018-07-27
    • 2016-01-15
    • 2015-02-14
    • 2017-06-05
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多