【问题标题】:AttributeError: module 'statsmodels.formula.api' has no attribute 'OLS'AttributeError:模块“statsmodels.formula.api”没有属性“OLS”
【发布时间】:2019-10-20 07:58:42
【问题描述】:

我正在尝试使用普通最小二乘法进行多变量回归。但它说statsmodels没有属性'OLS'。公式。 api 库。 我正在关注 Udemy 讲座中的代码 代码如下:

import statsmodels.formula.api as sm
X_opt = X[:,[0,1,2,3,4,5]]
#OrdinaryLeastSquares
regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit(

错误如下:

AttributeError                            Traceback (most recent call last)
<ipython-input-19-3bdb0bc861c6> in <module>()
      2 X_opt = X[:,[0,1,2,3,4,5]]
      3 #OrdinaryLeatSquares
----> 4 regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()

AttributeError: module 'statsmodels.formula.api' has no attribute 'OLS'

【问题讨论】:

  • 你可以查看statsmodels的版本,是不是>= 0.5.0?类似print (statsmodels.__version__)
  • 使用import statsmodels.api as smformula.api 现在只有小写模型的公式接口,例如 ols

标签: python machine-learning linear-regression statsmodels


【解决方案1】:

为了完整起见,如果 statsmodels.version 为 0.10.0,则代码应如下所示:

import statsmodels.api as sm
X_opt = X[:,[0,1,2,3,4,5]]
#OrdinaryLeastSquares
regressor_OLS = sm.OLS(endog=y, exog=X_opt).fit()

【讨论】:

    【解决方案2】:

    试试这个,对我有用:

    import statsmodels.regression.linear_model as sm
    

    【讨论】:

      【解决方案3】:

      使用此导入。

      import statsmodels.api as sm
      

      【讨论】:

        【解决方案4】:

        上述方法我都试过了,虽然

        import statsmodels.api as sm
        

        导入对我有用。当我运行下一段代码时

        X_opt = X[:, [0, 1, 2, 3, 4, 5]]
        regressor_OLS = sm.OLS(endog=y, exog=X_opt).fit()
        

        它给了我这个错误。

        TypeError: ufunc 'isfinite' 不支持输入类型,并且 输入无法安全地强制转换为任何支持的类型 强制转换规则“安全”

        如果您遇到上述错误,您可以通过为np.array 指定dtype 来解决它。

        替换

        X_opt = X[:, [0, 1, 2, 3, 4, 5]]
        

        X_opt = np.array(X[:, [0, 1, 2, 3, 4, 5]], dtype=float)
        

        【讨论】:

          【解决方案5】:

          这是我今天尝试的有效解决方案。
          在导入中使用它

          import statsmodels.api as sm
          

          下面提到了您的其余修复

          X_opt = X[:, [0, 1, 2, 3, 4, 5]]
          X_opt = X_opt.astype(np.float64)
          regressor_OLS = sm.OLS(Y, X_opt).fit()
          

          这应该可行,因为它确实对我有用。

          【讨论】:

            【解决方案6】:

            正如@Josef 在评论中提到的,使用 ols() 而不是 OLS(),OLS() 确实不存在。

            【讨论】:

              猜你喜欢
              • 2020-03-16
              • 2018-04-14
              • 2019-02-18
              • 1970-01-01
              • 2020-01-01
              • 2019-07-20
              • 2021-11-05
              • 2021-11-04
              相关资源
              最近更新 更多