Python 线性回归
分析:女性身高与体重的关系
该数据集源自The World Almanac and Book of Facts(1975)
给出了年龄在30-39岁之间的15名女性的身高和体重信息
1.线性回归
# packages import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import statsmodels.api as sm
1.1数据处理
data = pd.read_csv("women.csv",index_col = 0) X = data["height"] X = sm.add_constant(X) y = data["weight"] data.describe() #数据描述性分析
plt.scatter(data["height"],data["weight"]) plt.show()
1.2模型拟合
model1 = sm.OLS(y,X) #最小二成模型 result = model1.fit() #训练模型 print(result.summary()) #输出训练结果
#单独调用回归结果的参数命令: result.params #回归系数 result.rsquared #回归拟合优度R result.f_pvalue #F统计量p值 sm.stats.stattools.durbin_watson(result.resid) #dw统计量,检验残差自相关性 sm.stats.stattools.jarque_bera(result.resid) #jb统计量,检验残差是否服从正态分布(JB,JBp值,偏度,峰度)
1.3模型预测
y_pre = result.predict() y_pre
1.4模型评价
#结果可视化 plt.rcParams['font.family']="simHei" #汉字显示 plt.plot(data["height"], data["weight"],"o") plt.plot(data["height"], y_pre) plt.title('女性体重与身高的线性回归分析')
从上图来看,简单线性回归的效果并不好,我们采取多项式回归
2.多项式回归
2.1数据处理
data = pd.read_csv("women.csv",index_col = 0) X = data["height"] y = data["weight"] X = np.column_stack((X,np.power(X,2),np.power(X,3))) #构造三阶多项式 X = sm.add_constant(X) #添加截距项 X
2.2模型拟合
model2 = sm.OLS(y,X) result = model2.fit() print(result.summary())
2.3模型预测
y_pre = result.predict() y_pre
2.4模型评价
#结果可视化 plt.rcParams['font.family']="simHei" #汉字显示 plt.plot(data["height"], data["weight"],"o") plt.plot(data["height"], y_pre) plt.title('女性体重与身高的线性回归分析')