Python手册(Machine Learning)--statsmodels(GettingStarted)

本文介绍Python统计建模库Statsmodels的基本用法,涵盖模型拟合、结果解读及模型诊断等内容。对比scikit-learn,Statsmodels提供了丰富的统计推断工具。
部署运行你感兴趣的模型镜像

本站已停止更新,查看最新内容请移至本人博客 https://wilenwu.gitee.io

statsmodels
与scikit-learn比较,statsmodels包含经典统计学和经济计量学的算法。包括如下子模块:

  • 回归模型:线性回归,广义线性模型,健壮线性模型,线性混合效应模型等等。
  • 方差分析(ANOVA)。
  • 时间序列分析:AR,ARMA,ARIMA,VAR和其它模型。
  • 非参数方法: 核密度估计,核回归。
  • 统计模型结果可视化。

statsmodels更关注统计推断,提供不确定估计和参数p-value。相反的,scikit-learn注重预测。


Python手册(Machine Learning)–statsmodels(GettingStarted)
Python手册(Machine Learning)–statsmodels(Regression)
Python手册(Machine Learning)–statsmodels(ANOVA)
Python手册(Machine Learning)–statsmodels(Tables+Imputation)
Python手册(Machine Learning)–statsmodels(MultivariateStatistics)
Python手册(Machine Learning)–statsmodels(TimeSeries)
Python手册(Machine Learning)–statsmodels(Survival)
Python手册(Machine Learning)–statsmodels(Graphics)


模型拟合和描述

>>> import statsmodels.api as sm
>>> import statsmodels.formula.api as smf
>>> import pandas
>>> df = sm.datasets.get_rdataset("Guerry", "HistData").data
>>> df = df.dropna()
# step 1 Describe model,return model class
>>> mod = smf.ols(formula='Lottery ~ Literacy + Wealth + Region', data=df)
# step 2 Fit model,return result class
>>> res = mod.fit()
# step 3 Summarize model
>>> print(res.summary())
 OLS Regression Results                            
==============================================================================
Dep. Variable:                Lottery   R-squared:                       0.338
Model:                            OLS   Adj. R-squared:                  0.287
Method:                 Least Squares   F-statistic:                     6.636
Date:                Sun, 23 Dec 2018   Prob (F-statistic):           1.07e-05
Time:                        18:41:19   Log-Likelihood:                -375.30
No. Observations:                  85   AIC:                             764.6
Df Residuals:                      78   BIC:                             781.7
Df Model:                           6                                         
Covariance Type:            nonrobust                                         
===============================================================================
                  coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept      38.6517      9.456      4.087      0.000      19.826      57.478
Region[T.E]   -15.4278      9.727     -1.586      0.117     -34.793       3.938
Region[T.N]   -10.0170      9.260     -1.082      0.283     -28.453       8.419
Region[T.S]    -4.5483      7.279     -0.625      0.534     -19.039       9.943
Region[T.W]   -10.0913      7.196     -1.402      0.165     -24.418       4.235
Literacy       -0.1858      0.210     -0.886      0.378      -0.603       0.232
Wealth          0.4515      0.103      4.390      0.000       0.247       0.656
==============================================================================
Omnibus:                        3.049   Durbin-Watson:                   1.785
Prob(Omnibus):                  0.218   Jarque-Bera (JB):                2.694
Skew:                          -0.340   Prob(JB):                        0.260
Kurtosis:                       2.454   Cond. No.                         371.
==============================================================================

Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
>>> res.params  # 获取模型参数
Intercept      38.651655
Region[T.E]   -15.427785
Region[T.N]   -10.016961
Region[T.S]    -4.548257
Region[T.W]   -10.091276
Literacy       -0.185819
Wealth          0.451475
dtype: float64
>>> dir(res)    # 查看完整的属性列表

输入输出模型

from statsmodels.iolib import smpickle
smpickle.save_pickle(obj, fname)	#Save the object to file via pickling.
smpickle.load_pickle(fname)	#Load a previously saved object from file

模型测试和绘图

>>> #Rainbow测试线性度(零假设是关系被正确建模为线性)
>>> sm.stats.linear_rainbow(res)
(0.847233997615691, 0.6997965543621644)
>>> sm.graphics.plot_partregress('Lottery', 'Wealth', ['Region', 'Literacy'],
      data=df, obs_labels=False) #绘制回归图

1

使用R型公式来拟合模型

import statsmodels.formula.api as smf

formula说明示例
~分隔符,左边为响应变量,右边为解释变量
+添加变量y~x+y
-移除变量y~xzw–x:z:w可展开为 y ~ (x + z + w)**2
-移除变量y~x-1(移除截距)
:预测变量交互项y~x+y+x:y
*包含所有交互项的简洁方式代码y~ x * z可展开为y ~ x + z + x:z
**交互项的最高次数代码 y ~ (x + z + w)**2 可展开为 y ~ x + z + w + x:z + x:w + z:w
C()处理分类变量
function数学函数log(y) ~ x + z + w

支持R型公式的模型

In [15] res = smf.ols(formula='Lottery ~ Literacy + Wealth + C(Region) -1 ', data=df).fit()

不支持R型公式的模型,使用patsy 模块

#Using formulas with models that do not (yet) support them
In [22]: import patsy
In [23]: f = 'Lottery ~ Literacy * Wealth'
In [24]: y, X = patsy.dmatrices(f, df, return_type='matrix')
 #y被转化为patsy.DesignMatrix,x被转化为转化为numpy.ndarray
In [26]: print(X[:5])
[[   1.   37.   73. 2701.]
 [   1.   51.   22. 1122.]
 [   1.   13.   61.  793.]
 [   1.   46.   76. 3496.]
 [   1.   69.   83. 5727.]]
In [27]: f = 'Lottery ~ Literacy * Wealth'

In [28]: y, X = patsy.dmatrices(f, df, return_type='dataframe') #转化为pandas.dataframe
In [30]: print(X[:5])
   Intercept  Literacy  Wealth  Literacy:Wealth
0        1.0      37.0    73.0           2701.0
1        1.0      51.0    22.0           1122.0
2        1.0      13.0    61.0            793.0
3        1.0      46.0    76.0           3496.0
4        1.0      69.0    83.0           5727.0
In [31]: res=smf.OLS(y, X).fit()

statsmodels参数

Statsmodels使用endog和exog为模型数据参数名称,作为估计器的观测变量。

endogexog
yx
y variablex variable
left hand side (LHS)right hand side (RHS)
dependent variable(因变量)independent variable(自变量)
regressandregressors
outcomedesign
response variable(响应变量)explanatory variable(解释变量)

模型和拟合结果的超类

Model和Result是statsmodels所有模型和结果的父类

model class

Model(endog, exog=None, **kwargs) #建立模型
Methodsdesc
fit()Fit a model to data.
from_formula(formula, data, subset=None, drop_cols=None, *args, **kwargs)Create a Model from a formula and dataframe.
predict(params, exog=None, *args, **kwargs)After a model has been fit predict returns the fitted values.
Attributesdesc
endog_namesNames of endogenous variables
exog_namesNames of exogenous variables

result class

Results(model, params, **kwd) #一般通过模型fit方法拟合生成
Methodsdesc
initialize(model, params, **kwd)
predict([exog, transform])Call self.model.predict with self.params as the first argument.
summary()

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

开始学习机器学习可以是一个令人兴奋和有趣的过程。以下是一些帮助你入门的步骤和建议。 步骤1:学习基本概念和理论 了解机器学习的基本概念、算法和技术是开始的第一步。你可以通过阅读教科书、学术论文或参加在线教育平台上的机器学习课程来学习这些知识。确保你对基本的数学和统计学概念有一定的了解,因为它们与机器学习密切相关。 步骤2:选择适当的编程语言和工具 机器学习的实现通常需要编程来处理和分析数据集。选择适合你的需求的编程语言,如Python或R,并熟悉与机器学习相关的库和工具,如Scikit-Learn、TensorFlow或PyTorch。 步骤3:实践和探索数据集 找到适合初学者的数据集,可以是公开可用的数据集或者自己收集的数据。通过使用所选编程语言和工具,将数据导入和处理,并探索数据集的不同特征和模式。 步骤4:选择合适的机器学习算法 根据你的数据和问题类型选择合适的机器学习算法。有监督学习、无监督学习和强化学习是常见的算法类型。根据你的研究方向和目标,选择合适的算法来训练模型。 步骤5:训练和评估模型 使用你的数据集来训练机器学习模型,并使用评估指标来评估模型的性能。这可以帮助你了解模型的准确性和效果,并根据需要进行改进。 步骤6:调整和优化模型 通过调整模型的超参数、改变特征工程方法或尝试其他算法来进一步改进模型的性能。这是一个迭代的过程,可以帮助你逐渐提高模型的准确性和泛化能力。 步骤7:实际应用和持续学习 将机器学习模型应用到实际问题中,探索更多的数据和场景。保持对最新研究和技术的学习,并与机器学习社区保持联系,以不断提升自己的技能和知识。 通过以上步骤,你可以开始你的机器学习之旅,并逐渐提高自己在这个领域的技能水平。记住,持续学习和实践是成为一名优秀的机器学习从业者的关键。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值