前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习 | 使用statsmodels和sklearn进行回归分析

机器学习 | 使用statsmodels和sklearn进行回归分析

作者头像
邓飞
发布2020-06-17 11:20:02
2.2K0
发布2020-06-17 11:20:02
举报

记录一下使用Python进行的单变量回归分析的操作流程。另外推荐一个sklearn机器学习的哔哩哔哩视频(文末阅读原文,进行观看)。

python不像R中,默认的函数可以做回归分析lm,可以做方差分析aov,python中进行统计分析需要载入外在的包,这里经常用到的是statsmodelssklearn包,statsmodels风格还是和R语言类似,sklearn则偏向机器学习了,是机器学习的入门包。

「statsmodels包介绍:」

statsmodels官方文档:https://www.statsmodels.org/stable/

statsmodels主要是偏向传统统计分析,比如回归分析,方差分析,时间序列等。

  • 回归模型:线性回归 ,通用线性回归,鲁邦线性模型 ,线性混合效应模型等
  • 方差分析(ANOVA)
  • 时间序列分析:AR , ARMA , ARIMA , VAR等
  • 非参数方法:核密度估计 , 核回归
  • 统计模型结果可视化

「sklearn包介绍:」

sklearn官方文档:https://scikit-learn.org/stable/

sklearn 是一个机器学习包,包括各种机器学习的方法。

  • 分类 :SVM , K近邻 ,随机森林 , 逻辑回归等
  • 回归 :Lasso ,岭回归 等
  • 聚类 :K-means ,谱聚类等
  • 降维 :PCA ,特征选择 ,矩阵分解等
  • 模型选择 :网格搜索, 交叉验证 ,指标矩阵
  • 预处理:特征提取,正态化

「来自R语言用户转python数据分析的毒打」

❝这毒打甚是酸爽,简单的回归分析,R中一行代码的事情,在python中差点劝退,这是学艺不精然后丢人现眼的感慨啊!用法不太一样,习惯很难改,不过随着python语法的熟悉,套路了解之后,就淡定很多,感觉python进行分析时,更偏向底层,R分析时更友好,但是python中的sklearn,通过建立一套规则,之后无论回归分析,还是随机森林,还是岭回归,套路都是一样的。 ❞

「sklearn机器学习的一般流程包括:」

  • 数据的获取
  • 特征的提取
  • 特征的选择
  • 数据预处理
  • 模型的训练
  • 模型的评估
  • 模型的优化
  • 模型持久化

「进入正题」


这里,使用Python中的statsmodels和sklearn进行回归分析。

1. 数据来源:women

women是R中的一个数据集,我们把它保存到csv文件中:

代码语言:javascript
复制
> data(women)
> write.csv(women,"women.csv",row.names = F)

「数据预览:」

2. statsmodels的矩阵的形式

❝statsmodels有两种方法,一种是通过numpy矩阵操作的形式运算,这里的OLS都是大写,另一种是formula形式,ols是小写,风格类似R。 ❞

代码语言:javascript
复制
import pandas as pd
import statsmodels.api as sm
dat = pd.read_csv("women.csv")
dat.head()
dat.describe()

x = dat['height']
X = x.values.reshape(-1,1) # 转化为矩阵形式
y = dat['weight']

# 增加常数项
X1 = sm.add_constant(X)
X1
re = sm.OLS(y,X1).fit() # 注意,这里y在前面,X在后面
print(re.summary())

「代码思路:」

  • 载入pandas,为了读取数据
  • 载入statsmodels为了分析数据
  • 提取height一列,将其变为矩阵的形式,作为x变量
  • 提取weight一列,作为y变量
  • 增加常数(截距)
  • 使用OLS进行模型拟合
  • 查看结果

结果:

结果可以看出,截距为-87.5167,回归系数为3.45,两者都达到极显著水平。R方为0.991,调和R方为0.990.

3. statsmodels的formula的形式

❝statsmodels也可以使用类似R语言,公式的方法进行建模。 ❞

代码语言:javascript
复制
import statsmodels.formula.api as smf
smf.ols("weight ~ height",data=dat).fit().summary()

结果:

可以看出,formula和前者的结果完全一致。

4. sklearn的形式

❝sklearn是非常强大的包,包括很多机器学习的方法,是机器学习的入门包,这里使用其分析回归分析。 ❞

代码语言:javascript
复制
from sklearn.linear_model import LinearRegression

mod = LinearRegression()

re = mod.fit(X1,y) # 注意,这里X在前面,y在后面。
re.coef_
re.intercept_

「结果:」

结果可以看出,回归系数和截距和之前的分析完全一致。

「一个坑:」

statsmodels中,进行分析时,都是y变量在前面,X变量在后面,比如:

代码语言:javascript
复制
re = sm.OLS(y,X1).fit() # 注意,这里y在前面,X在后面
smf.ols("weight ~ height",data=dat).fit().summary()

但是sklearn中,X在前面,y在后面,比如:

代码语言:javascript
复制
re = mod.fit(X1,y) # 注意,这里X在前面,y在后面。

5. R语言作为对比

代码语言:javascript
复制
> mod = lm(weight ~ height ,data=women)
> summary(mod)

结果:

在这里插入图片描述

可以看出,截距为-87.51667,回归系数为3.45,R方为0.991,调和R方为0.9903,和之前的结果完全一致。

6. sklearn用于GWAS和GS的实施

sklearn中机器学习的应用,非常具有代表性,这里总结sklearn拟合模型三部曲:

  • 第一步:实例化,建立评估模型对象
  • 第二步:通过模型接口训练模型
  • 第三步:通过模型接口提取需要的信息

「以回归分析为例,sklearn是这样做的:」

代码语言:javascript
复制
from sklearn.linear_model import LinearRegression # 载入回归分析
mod = LinearRegression() # 第一步:实例化,我们后面就可以用mod去建模了
re = mod.fit(X1,y) # 第二步:通过接口,训练模型
re.coef_ # 第三步:提取结果信息
re.intercept_ # # 第三步:提取结果信息

上面是回归分析,也可以很容易的变为随机森林,决策树之类的方法,举一反三的感觉不要太爽喔!

「然后呢?GWAS和GS什么鬼?」

然后我就想到,通过这种形式去将GWAS和GS的分析放进去,像GS也包括贝叶斯啊,岭回归啊(RRBLUP),参考群,候选群,交叉验证之类的概念,本质上也是机器学习的一种形式,通过这种形式调用,包括后面什么卷积神经网络等前沿性的算法考虑在内,然后封装成一个库,对外提供接口API,提供参考群数据,预测候选群,然后跑各种各样的模型,出一个最优模型的结果,前景不要太美好……哈哈哈……

❝我知道,已经有不少研究这样做了,但是想着自己以后能把比较前沿成熟的算法放到自己工作中,感觉好像已经跨行成功进入人工智能的样子,套用茂茂的话:“好嗨哟”…… ❞

7. 怎么能少得了哔哩哔哩?

「推荐书籍」,之前写了一篇西瓜书的读后感:如何学习GWAS以及安利西瓜书,没有给出书名,差评!这里贴出书名,据说网上有电子版的,但是对于买书当作防身的我,纸质书还是更有安全感。

上面这两本书,我是在哔哩哔哩上面,看到这个up主推荐的,她是个妹子,还把课讲得这么好,不推荐良心很痛的……

「快来关注我吧,看我是如何在进军机器学习的路上:」

  • 信心满满离开家,
  • 备受打击咬着牙,
  • 以为坚持能入门,
  • 成功劝退脸被打。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 育种数据分析之放飞自我 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 数据来源:women
  • 2. statsmodels的矩阵的形式
  • 3. statsmodels的formula的形式
  • 4. sklearn的形式
  • 5. R语言作为对比
  • 6. sklearn用于GWAS和GS的实施
  • 7. 怎么能少得了哔哩哔哩?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档