多语言展示
当前在线:641今日阅读:113今日分享:31

python数学工具的回归和图形

Python是目前最流行最简单用途最广泛的编程语言,大数据时代最应该学习的一门编程语言。工作中经常遇到预测销量或者预测库存等,在金融中就要预测收益了,那么python如何进行简单预测呢。最常用的就是最小二乘法进行回归了。这里看一个函数,然后通过几种方法去逼近(回归)。
工具/原料

python,anaconda,spyder,numpy,matplotlib.pyplot

方法/步骤
1

加载需要的库:numpy和matplotlib.pyplot。自定义一个函数f(x)=sin(x)+0.5x;x = np.linspace(-2 * np.pi, 2 * np.pi, 50)表示x取值范围为[-2π,2π];plt.plot(x, f(x), 'b')表示绘制f(x)函数图形;plt.grid(True)表示图形添加网格;plt.xlabel('x')表示x轴标签为‘x’;plt.ylabel('f(x)')表示y轴标签为‘f(x)’;如图所示

2

线性回归拟合图形。reg = np.polyfit(x, f(x), deg=1)中deg=1表示f(x)中x的最高次数为1;ry = np.polyval(reg, x)表示求近似值;plt.plot(x, f(x), 'b', label='f(x)')表示绘制函数f(x)的图形,蓝色线条,且标记为‘f(x)’;plt.plot(x, ry, 'r.', label='regression')表示绘制近似值的图形,红色点状,且标记为‘regression’;plt.legend(loc=0)表示图例显示在最佳位置;plt.grid(True)表示给图形添加网格;plt.xlabel('x')表示x轴标签为‘x’;plt.ylabel('f(x)')表示y轴标签为‘y’;如图所示

3

多项式函数回归拟合图形(1)。reg = np.polyfit(x, f(x), deg=5)表示函数f(x)中的x最高次数为5;其他同线性回归,但是可以看出拟合程度比线性回归好很多了,如图所示

4

多项式函数回归拟合图形(2)。reg = np.polyfit(x, f(x), 7)表示函数f(x)中的x的最高次数为7;其他同线性回归,可以看出,拟合程度比最高次数为5的多项式函数效果更好一些;看起来好像一样了 ?我们使用allclose函数来检查下是否一模一样:显示False,说明不一样,相差有多大呢?使用均方差np.sum((f(x) - ry) ** 2) / len(x)看看,不到0.0018,已近很小了,所以看起来很逼近了;如图所示

5

选择基函数进行回归(1个基函数)。matrix = np.zeros((3 + 1, len(x)))matrix[3, :] = x ** 3,matrix[2, :] = x ** 2,matrix[1, :] = x,matrix[0, :] = 1,使用矩阵定义基函数,x的最高次数为3;reg = np.linalg.lstsq(matrix.T, f(x))[0]表示取得单个基函数的最优参数reg。ry = np.dot(reg, matrix)表示使用矩阵乘法运算,得出回归估算值。然后类似线性回归绘图,如图所示

6

选择基函数进行回归(2个基函数)。matrix[3, :] = np.sin(x)表示将最高次替换我sin(x),类似上面通过reg = np.linalg.lstsq(matrix.T, f(x))[0]和ry = np.dot(reg, matrix)计算多个基函数的最优参数和回归估算值,类似线性回归绘图;从图像看来,几乎一模一样,是否一样呢?我们通过np.allclose(f(x), ry)进行检验,结果为True,说明是一样的;通过np.sum((f(x) - ry) ** 2) / len(x)查看均方差,非常非常小,30个小数点了;使用reg查看最优参数,sin(x)系数是1,x的系数是0.5,如图所示

注意事项
1

np.linspace表示等差数列,默认为50个值

2

polyfit确定最优参数,polyval确定回归估值,deg=n表示n次多项式

3

allclose可以检查2个函数是否完全一样

4

linalg.lstsq是最小二乘法,[0]表示最优参数取值,其中系数顺序从常数项到最高次

推荐信息