[转载] Python 多项式拟合(一元回归)
参考链接: 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 多项式拟合(一元回归)相关推荐
- python多项式拟合_Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合。如 电...
Python 普通最小二乘法(OLS)进行多项式拟合,最小二乘法拟合二次多项式,多元函数拟合.如 电 多元函数拟合.如 电视机和收音机价格多销售额的影响,此时自变量有两个. python 解法:imp ...
- python多项式拟合:np.polyfit 和 np.polyld
python数据拟合主要可采用numpy库,库的安装可直接用pip install numpy等. 这段代码可以直接用,但是要用自己的值 #多项式拟合 y = data_jiedian_2 #输入自己 ...
- python多项式拟合_最小二乘法—多项式拟合非线性函数
本章涉及到的知识点清单: 1.函数的近似表示-高次多项式 2.误差函数-最小二乘法 3.引出案例函数曲线 4.目标函数 5.优化目标函数 6.优化目标函数-梯度下降法 7.优化目标函数-求解线性方程组 ...
- python多项式拟合问题
某次项目中遇到,需要预测某个值.数据大概是这样的: 有4个特征,特征之间数据差异较大,根据四个特征预测需要预测一个值,数据量是24条.其实就是一个多项式的拟合问题.刚开始,我想着用一些简单的模型去拟合 ...
- python 多项式拟合
import numpy as np import matplotlib.pyplot as plt #x的个数决定了样本量 x = np.arange(-1,1,0.02) #y为理想函数 y = ...
- Python机器学习:一元回归
→ \rightarrow →回归效果评价
- 回归概述——多项式拟合
数据生成 假设当观察到一个实值的输入变量 x\mathcal xx,而想利用这些观测数据来预测实值变量 ttt.数据由以一个带有噪声的由函数 sin(2πx)sin(2\pi\mathcal x)si ...
- c++ 多项式拟合算法
#ifndef CZY_MATH_FIT #define CZY_MATH_FIT #include <vector> /* 多项式拟合 */ namespace czy{////// \ ...
- python 一元回归拟合(含幂函数,对数,S函数,指数函数,一次、二次、三次,逆函数,生长、复合函数)
提示 目录 因为工作最近需要对数据进行拟合生成指标 一.最后的成果 二.导入数据 三.将数据中的自变量因变量都抽出来,进行九种回归拟合 1.代码如下: 2.这里补充下变换知识 三 对数据进行绘图,画出 ...
最新文章
- 【SDL】 如何在RedHat6.5中搭建SDL开发环境
- Eclipse Code Review(代码审查)工具介绍
- html 图片展示 3d,CSS3 3D图像显示
- python 大量使用json 存储数据时,格式化输出的方式
- OpenCv之图像形态学(笔记08)
- linux oracle 11g ora-00845,Oracle 11g ORA-00845 在Linux 下的解决方案
- 母版页与用户控件区别(思维导图整理)
- 在线JSON校验格式化工具,文本对比工具,截图notepad工具
- 串口通信工具android,串口调试工具手机版
- 前端页面生成神器以及后端变量命名神器
- 基于springboot酒店管理系统
- 12uec++多人游戏【自定义碰撞通道+头部暴击+连续开火】
- vue+elementUl实现登录记住密码功能
- Process Lasso 介绍
- Staring into the Abyss: An Evaluation of Concurrency Control with One Thousand Cores 论文阅读笔记
- 多多直播场控软件功能说明
- 秋招面试之同花顺面经
- 直播预告 | Mila实验室来啦!
- 学生专用计算机在线使用,学校用的学生在线考试系统有什么优点
- 计算机图形学 | 探秘造型技术
热门文章
- 2021牛客暑期多校训练营10,签到题FH
- ZUST蓝桥杯校内选拔赛(java,c)安吉校区
- 【PAT乙】1004 成绩排名 (20分) struct结构
- 【NOIP2015】【Luogu2670】扫雷游戏(搜索,字符串输入输出)
- 10截图时屏幕变大_解锁电脑更多的截屏姿势:Win 10中自带的七种截图方法
- cloc工具 linux,Linux下源代码行数统计工具(sloccount,cloc等)
- java web scala_Springboot与scala编写第一个web程序
- [leetcode] 472. 连接词
- Bellman_Ford边上权值为任意值的单源最短路径问题(+路径打印)边集合与邻接表两种实现
- dijkstra--非负权值的单源最短路径STL实现(邻接表+优先队列) (带路径)