参考链接: 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.0

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from sklearn.linear_model import LinearRegression

df = pd.read_table('D:/Python35/mypy/test.txt')

x = np.asarray(df[['x']])

y = np.asarray(df[['y']])

reg = LinearRegression().fit(x, y)

print("一元回归方程为:  Y = %.5fX + (%.5f)" % (reg.coef_[0][0], reg.intercept_[0]))

print("R平方为: %s" % reg.score(x, y))

plt.scatter(x, y,  color='black')

plt.plot(x, reg.predict(x), color='red', linewidth=1)

plt.show()

一元多阶线性拟合(多项式拟合):

假设存在一个函数,只有一个自变量,即只有一个特征属性,满足多项式函数如下:

损失函数:损失函数越小,就代表模型拟合的越好。

通过对损失函数偏导为0时,得到最终解方程的函数:

公式推导参考:

https://www.zhihu.com/question/23483726

http://blog.csdn.net/xiaolewennofollow/article/details/46757657

https://wenku.baidu.com/view/f20f3e0da8956bec0875e343.html?from=search

python numpy.polyfit 实现:(此处 x 只有一个特征,属于一元多阶函数)

假设因变量 y 刚好符合该公式。

import numpy as np

import matplotlib.pyplot as plt

x = np.array([-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10])

y = np.array(2*(x**4) + x**2 + 9*x + 2) #假设因变量y刚好符合该公式

#y = np.array([300,500,0,-10,0,20,200,300,1000,800,4000,5000,10000,9000,22000])

# coef 为系数,poly_fit 拟合函数

coef1 = np.polyfit(x,y, 1)

poly_fit1 = np.poly1d(coef1)

plt.plot(x, poly_fit1(x), 'g',label="一阶拟合")

print(poly_fit1)

coef2 = np.polyfit(x,y, 2)

poly_fit2 = np.poly1d(coef2)

plt.plot(x, poly_fit2(x), 'b',label="二阶拟合")

print(poly_fit2)

coef3 = np.polyfit(x,y, 3)

poly_fit3 = np.poly1d(coef3)

plt.plot(x, poly_fit3(x), 'y',label="三阶拟合")

print(poly_fit3)

coef4 = np.polyfit(x,y, 4)

poly_fit4 = np.poly1d(coef4)

plt.plot(x, poly_fit4(x), 'k',label="四阶拟合")

print(poly_fit4)

coef5 = np.polyfit(x,y, 5)

poly_fit5 = np.poly1d(coef5)

plt.plot(x, poly_fit5(x), 'r:',label="五阶拟合")

print(poly_fit5)

plt.scatter(x, y, color='black')

plt.legend(loc=2)

plt.show()

其中5个函数拟合如下:

可以看到,只要最高阶为4阶以上,如 四阶拟合 和 五阶拟合,拟合函数近乎完全是符合原函数 y = 2*(x**4) + x**2 + 9*x + 2,拟合是最好的,几乎没有产生震荡,没有过拟合。

当将因变量 y 更换如下:

x = np.array([-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10])

y = np.array([300,500,0,-10,0,20,200,300,1000,800,4000,5000,10000,9000,22000])

结果发现,四阶及以上拟合程度较高。当设置阶数越高,震荡越明显,也就过度拟合了。怎样确定拟合函数或者最高阶呢? 参考:Python 确定多项式拟合/回归的阶数

转载于:https://www.cnblogs.com/hzc2012/p/8358302.html

[转载] Python 多项式拟合(一元回归)相关推荐

  1. python多项式拟合_Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合。如 电...

    Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合.如 电 多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法:imp ...

  2. python多项式拟合:np.polyfit 和 np.polyld

    python数据拟合主要可采用numpy库,库的安装可直接用pip install numpy等. 这段代码可以直接用,但是要用自己的值 #多项式拟合 y = data_jiedian_2 #输入自己 ...

  3. python多项式拟合_最小二乘法—多项式拟合非线性函数

    本章涉及到的知识点清单: 1.函数的近似表示-高次多项式 2.误差函数-最小二乘法 3.引出案例函数曲线 4.目标函数 5.优化目标函数 6.优化目标函数-梯度下降法 7.优化目标函数-求解线性方程组 ...

  4. python多项式拟合问题

    某次项目中遇到,需要预测某个值.数据大概是这样的: 有4个特征,特征之间数据差异较大,根据四个特征预测需要预测一个值,数据量是24条.其实就是一个多项式的拟合问题.刚开始,我想着用一些简单的模型去拟合 ...

  5. python 多项式拟合

    import numpy as np import matplotlib.pyplot as plt #x的个数决定了样本量 x = np.arange(-1,1,0.02) #y为理想函数 y = ...

  6. Python机器学习:一元回归

    → \rightarrow →回归效果评价

  7. 回归概述——多项式拟合

    数据生成 假设当观察到一个实值的输入变量 x\mathcal xx,而想利用这些观测数据来预测实值变量 ttt.数据由以一个带有噪声的由函数 sin(2πx)sin(2\pi\mathcal x)si ...

  8. c++ 多项式拟合算法

    #ifndef CZY_MATH_FIT #define CZY_MATH_FIT #include <vector> /* 多项式拟合 */ namespace czy{////// \ ...

  9. python 一元回归拟合(含幂函数,对数,S函数,指数函数,一次、二次、三次,逆函数,生长、复合函数)

    提示 目录 因为工作最近需要对数据进行拟合生成指标 一.最后的成果 二.导入数据 三.将数据中的自变量因变量都抽出来,进行九种回归拟合 1.代码如下: 2.这里补充下变换知识 三 对数据进行绘图,画出 ...

最新文章

  1. 【SDL】 如何在RedHat6.5中搭建SDL开发环境
  2. Eclipse Code Review(代码审查)工具介绍
  3. html 图片展示 3d,CSS3 3D图像显示
  4. python 大量使用json 存储数据时,格式化输出的方式
  5. OpenCv之图像形态学(笔记08)
  6. linux oracle 11g ora-00845,Oracle 11g ORA-00845 在Linux 下的解决方案
  7. 母版页与用户控件区别(思维导图整理)
  8. 在线JSON校验格式化工具,文本对比工具,截图notepad工具
  9. 串口通信工具android,串口调试工具手机版
  10. 前端页面生成神器以及后端变量命名神器
  11. 基于springboot酒店管理系统
  12. 12uec++多人游戏【自定义碰撞通道+头部暴击+连续开火】
  13. vue+elementUl实现登录记住密码功能
  14. Process Lasso 介绍
  15. Staring into the Abyss: An Evaluation of Concurrency Control with One Thousand Cores 论文阅读笔记
  16. 多多直播场控软件功能说明
  17. 秋招面试之同花顺面经
  18. 直播预告 | Mila实验室来啦!
  19. 学生专用计算机在线使用,学校用的学生在线考试系统有什么优点
  20. 计算机图形学 | 探秘造型技术

热门文章

  1. 2021牛客暑期多校训练营10,签到题FH
  2. ZUST蓝桥杯校内选拔赛(java,c)安吉校区
  3. 【PAT乙】1004 成绩排名 (20分) struct结构
  4. 【NOIP2015】【Luogu2670】扫雷游戏(搜索,字符串输入输出)
  5. 10截图时屏幕变大_解锁电脑更多的截屏姿势:Win 10中自带的七种截图方法
  6. cloc工具 linux,Linux下源代码行数统计工具(sloccount,cloc等)
  7. java web scala_Springboot与scala编写第一个web程序
  8. [leetcode] 472. 连接词
  9. Bellman_Ford边上权值为任意值的单源最短路径问题(+路径打印)边集合与邻接表两种实现
  10. dijkstra--非负权值的单源最短路径STL实现(邻接表+优先队列) (带路径)