用统计分析包和机器学习包做回归分析

今天来说说简单的线性回归,分别是用统计分析包statsmodels和机器学习包sklearn,数据来源是回归数据。
这个例子网上已经写烂了,大家可以自行搜索看看。
某公司在多个媒体渠道上发布了广告,业务人员想了解各媒体的广告费用对产品销售额的影响程度到底如何。
数据结构如下所示:在这里插入图片描述
首先做个相关系数矩阵,看看是不是有相关关系:

import pandas as pd
data=pd.read_csv(r'回归.csv')
data.corr()

在这里插入图片描述
看上去,sales和其他变量都有那么些关系,感觉TV与sales的关系更密切,就先拿它来做个简单线性回归。
先使用statsmodels包做一次。线性回归使用的是statsmodels.formula.api中的ols函数。

from statsmodels.formula.api import ols
lr=ols('sales~TV',data=data).fit()
lr.summary()

这里的回归公式的写法比较简单,在因变量和自变量直接用个~连起来就好了,注意公式两边要用引号括起来。data参数表示数据来源,我的数据名字起的叫data,所以data=data。fit就是进行拟合。summary用于展示结果的全部信息。
在这里插入图片描述
可以看到,TV的p值通过了检验,调整后的R方值为0.610,但并不是那么的高,考虑是不是可能漏掉些重要变量。我们再把其他变量也加进来,做一次多元线性回归。

lr1=ols('sales~TV+newspaper+radio',data=data).fit()
lr1.summary()

在这里插入图片描述
这次的结果貌似R方更好了,但可以看到newspaper的系数并未通过检验,并且值为负,意思是每在报纸上多投入一些,则销售量会减少,这很明显也不符合实际情况,因此我们需要把newspaper变量去掉再做一次。

lr2=ols('sales~TV+radio',data=data).fit()
lr2.summary()

在这里插入图片描述
第三次的效果显然所有系数都通过了检验,并且R方也没有明显的下降,AIC和BIC都有些许降低,表明结果比第二次更好。因此,我们可以用这次的结果作为我们的回归建模结果。
再来看看使用机器学习包sklearn的。机器学习使用的是Linear_model模块中的LinearRegression函数。

from sklearn.linear_model import LinearRegression as LR
datax=data.iloc[:,0:3]   #自变量TV,radio,newspaper
datax1=data.iloc[:,0:2]    #自变量TV,radio
datax2=data.iloc[:,0].values.reshape((-1,1))  #自变量TV
datay=data.iloc[:,3].values.reshape((-1,1))  #因变量sales

这里的datay是因变量,也就是取的最后一列。datax是前三列,datax1是前两列,datax2是就只有TV这一列。但因为机器学习包里要求参数都是二维的,因此我们需要做个reshape。
和统计分析的流程一样,我们先做只有TV的简单线性回归。

lr2=LR().fit(datax2,datay)
print(lr2.score(datax2,datay))
print(lr2.coef_)
print(lr2.intercept_)

在这里插入图片描述
可以看到,系数和R方和统计分析的结果差不多,但唯一感觉不满的就是,没有系数检验的内容。(可能是我不知道,请多多指教)
加入全部的变量再来一次:

lr1=LR().fit(datax,datay)
print(lr1.score(datax,datay))
print(lr1.coef_)
print(lr1.intercept_)

在这里插入图片描述
同样出现了R方提高,但某一个变量系数为负的情况,和前面基本一致。
最后,去掉newspaper再来一次:

lr=LR().fit(datax1,datay)
print(lr.score(datax1,datay))
print(lr.coef_)
print(lr.intercept_)

在这里插入图片描述
结果也和前面差不多。
单从这个例子来说,统计分析包和机器学习包跑出的结果基本没啥区别,唯一不同的就是,机器学习包的结果信息展示就没summary那么舒服,并且也没有系数检验的结果。不过机器学习做回归的目的本身也并不讨论变量之间的因果关系,因此也无所谓了,只要能做预测就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值