Python多项式拟合(一元回归)

Python多项式拟合(一元回归)

2023年6月29日发(作者:)

Python多项式拟合(⼀元回归)⼀元⼀阶线性拟合:假设存在⼀条线性函数尽量能满⾜所有的点:y=ax+b .对所有点的的公式为: 残差值β = 实际值y - 估计值y,β 应尽量⼩,当 β = 0 时,则完全符合⼀元线性⽅程:y=ax+b

通过最⼩⼆乘法计算残差和最⼩:

根据微积分,当 Q 对 a、b 的⼀阶偏导数为了0时,Q 达到最⼩。

解⽅程组,求 a、b 的值:

⽰例:

如客户的贷款⾦额及还款⾦额情况,设 x 为贷款⾦额,预测Y为还款⾦额。(也可以当做收⼊与消费的情况) 通过公式计算相应的值: 解得:a = 655131.86/2194469.14 = 0.2985b = 172.64-a*598.24 = -5.93464 即得回归⽅程为: Ÿ = 0.2985*x - 5.93464

回归⽅程验证:Y 的第 i 个观察值与样本值的离差 ,点与回归线在 Y 轴上的距离。总离差分解为两部分为:实际观测值与回归拟合值之差,为回归直线不能解释的部分:样本回归拟合值与观测值的平均值之差,为回归直线可解释的部分:其中,设总体平⽅和为:即得 回归平⽅和为:

残差平⽅和为:

即: TSS=ESS+RSS 样本中,TSS不变, 如果实际观测点离样本回归线越近,则ESS在TSS中占的⽐重越⼤.拟合优度:R2 为(样本)可决系数/判定系数(coefficient of determination),取值范围:[0,1]。R2越接近1,说明实际观测点离样本线越近,拟合优度越⾼。⼀般地要求R2≥0.7。

计算结果; R2 = 1 - 72279.48 / 267861.07 = 0.73016

python ⽅法实现:

#-*- coding: utf-8 -*-# python 3.5.0import numpy as npimport pandas as pdimport as plt

from _model import LinearRegression

df = _table('D:/Python35/mypy/')x = y(df[['x']])y = y(df[['y']])reg = LinearRegression().fit(x, y)print("⼀元回归⽅程为: Y = %.5fX + (%.5f)" % (_[0][0], ept_[0]))print("R平⽅为: %s" % (x, y))r(x, y, color='black')(x, t(x), color='red', linewidth=1)()

⼀元多阶线性拟合(多项式拟合): 假设存在⼀个函数,只有⼀个⾃变量,即只有⼀个特征属性,满⾜多项式函数如下:损失函数:损失函数越⼩,就代表模型拟合的越好。通过对损失函数偏导为0时,得到最终解⽅程的函数:公式推导参考:/question/23483726/xiaolewennofollow/article/details/46757657/view/?from=search

python t 实现:(此处 x 只有⼀个特征,属于⼀元多阶函数) 假设因变量 y 刚好符合该公式。import numpy as npimport as pltx = ([-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10])y = (2*(x**4) + x**2 + 9*x + 2) #假设因变量y刚好符合该公式#y = ([300,500,0,-10,0,20,200,300,1000,800,4000,5000,10000,9000,22000])# coef 为系数,poly_fit 拟合函数coef1 = t(x,y, 1)poly_fit1 = 1d(coef1)(x, poly_fit1(x), 'g',label="⼀阶拟合")print(poly_fit1)coef2 = t(x,y, 2)poly_fit2 = 1d(coef2)(x, poly_fit2(x), 'b',label="⼆阶拟合")print(poly_fit2)coef3 = t(x,y, 3)poly_fit3 = 1d(coef3)(x, poly_fit3(x), 'y',label="三阶拟合")print(poly_fit3)coef4 = t(x,y, 4)poly_fit4 = 1d(coef4)(x, poly_fit4(x), 'k',label="四阶拟合")print(poly_fit4)coef5 = t(x,y, 5)poly_fit5 = 1d(coef5)(x, poly_fit5(x), 'r:',label="五阶拟合")print(poly_fit5)r(x, y, color='black')(loc=2)()其中5个函数拟合如下:可以看到,只要最⾼阶为4阶以上,如 四阶拟合 和 五阶拟合,拟合函数近乎完全是符合原函数 y = 2*(x**4) + x**2 + 9*x + 2,拟合是最好的,⼏乎没有产⽣震荡,没有过拟合。当将因变量 y 更换如下:x = ([-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10])y = ([300,500,0,-10,0,20,200,300,1000,800,4000,5000,10000,9000,22000])结果发现,四阶及以上拟合程度较⾼。当设置阶数越⾼,震荡越明显,也就过度拟合了。怎样确定拟合函数或者最⾼阶呢? 参考:

发布者:admin,转转请注明出处:http://www.yc00.com/news/1687977471a62868.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信