0 绘图函数
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc", size=16)
def runplt():
plt.figure()# 定义figure
plt.title(u'披萨的价格和直径',fontproperties=font_set)
plt.xlabel(u'直径(inch)',fontproperties=font_set)
plt.ylabel(u'价格(美元)',fontproperties=font_set)
plt.axis([5, 20, 5, 20]) # 坐标轴
plt.grid(True) # 网格线
return plt
1 生成数据
import numpy as np
X_train = np.array([6, 8, 10, 14, 18])
y_train = np.array([7, 9, 13, 17.5, 18])
M1 = np.vstack((np.ones_like(X_train), X_train)).T # 增加一行1,并转置
M2 = np.vstack((np.ones_like(X_train), X_train, X_train**2)).T
M3 = np.vstack((np.ones_like(X_train), X_train, X_train**2, X_train**3)).T
X_train
y_train
np.ones_like(X_train)
M1
2 拟合模型
import statsmodels.api as sm
res_1 = sm.OLS(y_train, M1).fit()
res_2 = sm.OLS(y_train, M2).fit()
res_3 = sm.OLS(y_train, M3).fit()
Linear
Quadratic polynomial
二次项回归优于
线性回归
Cubic polynomial
三次项回归AIC大于
二次项回归的AIC
statsmodels.api res_1.summary() res_1.summary2() 有和不同???
print(res_1.summary2())
3 画图
计算拟合值
y1_fitted = res_1.fittedvalues
y2_fitted = res_2.fittedvalues
y3_fitted = res_3.fittedvalues
原始数据散点图
plt = runplt()
plt.scatter(X_train, y_train, c='b', label='Data')
plt.legend()
3.1 Linear
plt = runplt()
plt.scatter(X_train, y_train, c='b', label='Data')
plt.plot(X_train, y1_fitted, 'g-', label='Linear')
plt.legend()
3.2 Quadratic polynomial
plt = runplt()
plt.scatter(X_train, y_train, c='b', label='Data')
plt.plot(X_train, y2_fitted, 'y--', label='Quadratic polynomial')
plt.legend()
3.3 Cubic polynomial
plt = runplt()
plt.scatter(X_train, y_train, c='b', label='Data')
plt.plot(X_train, y3_fitted, 'r:', label='Cubic polynomial')
plt.legend()
3.4 综合比较
plt = runplt()
plt.scatter(X_train, y_train, c='b', label='Data')
plt.plot(X_train, y1_fitted, 'g-', label='Linear')
plt.plot(X_train, y2_fitted, 'y--', label='Quadratic polynomial')
plt.plot(X_train, y3_fitted, 'r:', label='Cubic polynomial')
plt.legend()