Python数据分析(2)线性回归模型

前言

  • 蛋肥今天开始练习线性回归模型,包括一元线性回归、多元线性回归、线性回归模型评估。

准备

时间:2021/06/29
系统环境:Windows 10
所用工具:Jupyter Notebook\Python 3.0
涉及的库:pandas\matplotlib\LinearRegression\PolynomialFeatures\statsmodels.api

一元线性回归

蛋肥想法:数据集来源于阿里云天池,针对wechat和sales进行一元线性回归分析。

参考资料
阿里云天池-网店广告与销售数据集

#读取数据集
import pandas as pd
df=pd.read_csv(r"C:\Users\Archer\Desktop\advertising.csv")

#选取自变量、因变量
X=df[["wechat"]]
Y=df[["sales"]]

import matplotlib.pyplot as plt

#画图四件套:显示、矢量、中文、负号
%matplotlib inline
%config InlineBackend.figure_format="svg"
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

#观察数据散点图
plt.figure(figsize=(10,5))
#设置横纵坐标轴
plt.xlabel("wechat")
plt.ylabel("sales")
plt.scatter(X,Y)

#一元线性回归模型
from sklearn.linear_model import LinearRegression
regr=LinearRegression()
regr.fit(X,Y)
plt.plot(X,regr.predict(X),color="red")

#线性回归方程构造
a=regr.coef_[0]
b=regr.intercept_
plt.title("y="+str("%.2f"%a)+"x+"+str("%.2f"%b))

#保存图片
plt.savefig(r"C:\Users\Archer\Desktop\my_fig.png",dpi=500)

plt.show()
一元线性回归

一元多次线性回归

蛋肥想法:从wechat-sales数据散点图分布来看,应该更契合“y=ax+b”的直线方程,但为了练习,此处尝试使用一元二次线性回归,从结果来看不符合,二次项系数为0。

#在一元线性回归的代码里进行替换

#观察数据散点图
plt.figure(figsize=(10,5))
#设置横纵坐标轴
plt.xlabel("wechat")
plt.ylabel("sales")
plt.scatter(X,Y)

#搭建一元二次线性回归模型
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
poly_reg=PolynomialFeatures(degree=2)
X_=poly_reg.fit_transform(X)
regr=LinearRegression()
regr.fit(X_,Y)
plt.plot(X,regr.predict(X_),color="red")

#线性回归方程构造
ab=regr.coef_[0]
a=ab[2]
b=ab[1]
c=regr.intercept_
plt.title("y="+str("%.2f"%a)+"x^2+"+str("%.2f"%b)+"x+"+str("%.2f"%c))

#保存图片
plt.savefig(r"C:\Users\Archer\Desktop\my_fig.png",dpi=500)
一元二次线性回归

多元线性回归

蛋肥想法:数据集里除wechat外,还有weibo、others,尝试构造多元线性回归。

#读取数据集
import pandas as pd
df=pd.read_csv(r"C:\Users\Archer\Desktop\advertising.csv")

#选取自变量、因变量
X=df[["wechat","weibo","others"]]
Y=df[["sales"]]

#多元线性回归模型
from sklearn.linear_model import LinearRegression
regr=LinearRegression()
regr.fit(X,Y)

#线性回归方程构造
print(str(regr.coef_[0]))
print(str(regr.intercept_))
多元线性方程系数

简单模型评估

蛋肥想法:对刚构造的多元线性回归进行评估。

R-squared、Adj.R-squared的取值范围为0~1,值越接近1,模型的拟合程度越高。
P值越接近0,则特征变量的显著性越高,即该特征变量真的和目标变量具有相关性。

import statsmodels.api as sm
X_=sm.add_constant(X)
est=sm.OLS(Y,X_).fit()
print(est.summary())
评估结果

总结

  • 线性回归模型可解释性很强且建模速度较快,但模型相对简单,主要针对线性数据,局限性较大。
  • 在实战中,线性回归模型的应用相对较少,可作为机器学习的入门知识做简单了解。

你可能感兴趣的:(Python数据分析(2)线性回归模型)