前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >statsmodels 最小二乘法 线性回归

statsmodels 最小二乘法 线性回归

作者头像
Twcat_tree
发布2022-12-05 17:22:09
6710
发布2022-12-05 17:22:09
举报
文章被收录于专栏:二猫の家二猫の家

最近使用到了ols做线性回归,记录一下使用方法

首先是statsmodels,根据官网介绍,这是python里一个用于estimate statistical models 和 explore statistical data 的模块,经常做数据分析的小伙伴应该都不陌生

statsmodels is a Python module that provides classes and functions for the estimation of many different statistical models, as well as for conducting statistical tests, and statistical data exploration. An extensive list of result statistics are available for each estimator. The results are tested against existing statistical packages to ensure that they are correct. 

然后是ols的方法,悉大的tutor给到了api 和 formula.api 两种建模方法,感觉直接用formula更省事些,毕竟自己做老容易忘记加intercept  >-<

方法一:statsmodels.api 做最小二乘法,需要自己添加intercept截距项

方法二:statsmodels.formula.api 通过自定formula和dataframe生成模型,无需添加截距项

代码语言:javascript
复制
      import pandas 
      as pd
     
    
    
     
    
    
     
      import numpy 
      as np

方法一:statsmodels.api 做最小二乘法,需要自己添加intercept截距项

1. 生成数据

代码语言:javascript
复制
      data = pd.DataFrame({
      'Salary':np.random.rand(
      1000)*
      100000,
     
    
    
     
    
    
                         
      'Catologs':np.random.randint(
      1,
      20,size=
      1000),
     
    
    
     
    
    
                         
      'Children':np.random.randint(
      0,
      3,size=
      1000),
     
    
    
     
    
    
                         
      'AmountSpent':np.random.rand(
      1000)*
      10000})
     
    
    
     
    
    
     
      data.head()

2. 调用 statsmodels.api

代码语言:javascript
复制
import statsmodels.api as sm

3. 拟合模型

    3.1  新增截距项

代码语言:javascript
复制
      # 原有x,y
     
    
    
     
    
    
     
      x = data[[
      'Salary',
      'Catologs',
      'Children']] 
      # 注意是[[ ]]
     
    
    
     
    
    
     
      y = data[
      'AmountSpent']
     
    
    
     
    
    
      
     
    
    
     
    
    
     
      # 新增截距项
     
    
    
     
    
    
     
      x_with_intercept = sm.add_constant(x, prepend=
      True)

     3.2 OLS拟合,注意OLS要大写

代码语言:javascript
复制
      # 拟合模型
     
    
    
     
    
    
     
      model = sm.OLS(y, x_with_intercept) 
      # OLS 要大写,函数里因变量在前面
     
    
    
     
    
    
     
      results = model.fit()

方法二:statsmodels.formula.api 通过自定formula和dataframe生成模型,无需添加截距项

1. 生成数据

代码语言:javascript
复制
      # 生成数据
     
    
    
     
    
    
     
      data = pd.DataFrame({
      'Salary':np.random.rand(
      1000)*
      100000,
     
    
    
     
    
    
                         
      'Catologs':np.random.randint(
      1,
      20,size=
      1000),
     
    
    
     
    
    
                         
      'Children':np.random.randint(
      0,
      3,size=
      1000),
     
    
    
     
    
    
                         
      'AmountSpent':np.random.rand(
      1000)*
      10000})
     
    
    
     
    
    
     
      data.head()

2. 调用 statsmodels.formula.api

代码语言:javascript
复制
      # 直接调用formula,无需手动增加截距项
     
    
    
     
    
    
     
      import statsmodels.formula.api 
      as smf

3. 拟合模型

    3.1 明确要拟合的公式

代码语言:javascript
复制
      # formula,"因变量 ~ 自变量1 + 自变量2 + ... + 自变量n"
     
    
    
     
    
    
     
      formula = 
      "AmountSpent ~ Salary + Catologs + Children"

     3.2 OLS拟合

代码语言:javascript
复制
      model = smf.ols(formula, data)
     
    
    
     
    
    
     
      results = model.fit()

4. 输出拟合结果,检验R-square, coefficient是否显著 etc.

代码语言:javascript
复制
print(results.summary())

PS:随机生成的数据果然挺随机的,这结果等于做了个寂寞

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一:statsmodels.api 做最小二乘法,需要自己添加intercept截距项
  • 方法二:statsmodels.formula.api 通过自定formula和dataframe生成模型,无需添加截距项
  • 方法一:statsmodels.api 做最小二乘法,需要自己添加intercept截距项
  • 方法二:statsmodels.formula.api 通过自定formula和dataframe生成模型,无需添加截距项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档