python回归分析
假设原函数由一个三角函数和一个线性项组成
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline def f(x):
return np.sin(x) + 0.5 * x x = np.linspace(-2 * np.pi, 2 * np.pi, 50) plt.plot(x, f(x), 'b')
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')

一、用回归方式逼近
1. 作为基函数的单项式
最简单的情况是以单项式为基函数——也就是说,b1=1,b2=x,b3=x2,b4=x3,... 在这种情况下,Numpy有确定最优参数(polyfit)和以一组输入值求取近似值(ployval)的内建函数。ployfit函数参数如下:
| 参数 | 描述 |
|
x |
x坐标(自变量值) |
| y | y坐标(因变量值) |
| deg | 多项式拟合度 |
| full | 如果有真,返回额外的诊断信息 |
| w | 应用到y坐标的权重 |
| cov | 如果为真,返回协方差矩阵 |
典型向量化风格的polyfit和polyval线性回归(deg=7)应用方式如下:
reg = np.polyfit(x, f(x), deg=7)
ry = np.polyval(reg, x)
plt.plot(x,f(x),'b',label='f(x)')
plt.plot(x,ry,'r.',label='regression')
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')

2. 单独的基函数
当选择更好的基函数组时,可以得到更好的回归结果。单独的基函数必须能通过一个矩阵方法定义(使用Numpy ndarray对象)。
matrix = np.zeros((3+1,len(x)))
matrix[3,:] = np.sin(x)
matrix[2,:] = x **2
matrix[1,:] = x
matrix[0,:] = 1 reg = np.linalg.lstsq(matrix.T,f(x))[0]
ry = np.dot(reg,matrix) plt.plot(x,f(x),'b',label='f(x)')
plt.plot(x,ry,'r.',label='regression')
plt.legend(loc = 0)
plt.grid(True)
plt.xlabel('x')
plt.ylabel('f(x)')
对于有噪声的数据,未排序的数据,回归法都可处理。
3. 多维
以fm函数为例
def fm(x,y):
return np.sin(x) + 0.25 *x +np.sqrt(y) + 0.05 * y **2 x = np.linspace(0,10,20)
y = np.linspace(0,10,20)
X, Y = np.meshgrid(x,y)
Z = fm(X,Y)
x = X.flatten()
y = Y.flatten() from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl fig = plt.figure(figsize=(9, 6))
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,Z,rstride=2,cstride=2,cmap=mpl.cm.coolwarm,linewidth=0.5,antialiased=True)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(x,y)')
fig.colorbar(surf,shrink=0.5,aspect=5)

为了获得好的回归结果,编译一组基函数,包括一个sin函数和sqrt函数。statsmodels库提供相当通过和有益的函数OLS,可以用于一维和多维最小二乘回归。
matrix = np.zeros((len(x),6+1))
matrix[:,6] = np.sqrt(y)
matrix[:,5] = np.sin(x)
matrix[:,4] = y ** 2
matrix[:,3] = x **2
matrix[:,2] = y
matrix[:,1] = x
matrix[:,0] = 1 import statsmodels.api as sm
model = sm.OLS(fm(x,y),matrix).fit()
model.rsquared
a = model.params def reg_func(a,x,y):
f6 = a[6] * np.sqrt(y)
f5 = a[5] * np.sin(x)
f4 = a[4] * y ** 2
f3 = a[3] * x ** 2
f2 = a[2] * y
f1 = a[1] * x
f0 = a[0] * 1
return (f6+f5+f4+f3+f2+f1+f0)
# reg_func返回给定最优回归参数和自变量数据点的回归函数值
RZ = reg_func(a,X,Y)
fig = plt.figure(figsize=(9, 6))
ax = fig.gca(projection='3d')
surf1 = ax.plot_surface(X,Y,Z,rstride=2,cstride=2,cmap=mpl.cm.coolwarm,linewidth=0.5,antialiased=True)
surf2 = ax.plot_wireframe(X,Y,RZ,rstride=2,cstride=2,label = 'regression')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('f(x,y)')
fig.colorbar(surf,shrink=0.5,aspect=5)

python回归分析的更多相关文章
- python回归分析五部曲
Python回归分析五部曲(一)—简单线性回归 https://blog.csdn.net/jacky_zhuyuanlu/article/details/78878405?ref=myread Py ...
- Python回归分析五部曲(二)—多重线性回归
基础铺垫 多重线性回归(Multiple Linear Regression) 研究一个因变量与多个自变量间线性关系的方法 在实际工作中,因变量的变化往往受几个重要因素的影响,此时就需要用2个或2个以 ...
- Python回归分析五部曲(一)—简单线性回归
回归最初是遗传学中的一个名词,是由英国生物学家兼统计学家高尔顿首先提出来的,他在研究人类身高的时候发现:高个子回归人类的平均身高,而矮个子则从另一方向回归人类的平均身高: 回归分析整体逻辑 回归分析( ...
- Python回归分析五部曲(三)—一元非线性回归
(一)基础铺垫 一元非线性回归分析(Univariate Nonlinear Regression) 在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条曲线近似表示,则称为一元非线性回归 ...
- python 回归分析
一.线性回归 1 绘制散点图 import matplotlib.pyplot as plt x = [5,7,8,7,2,17,2,9,4,11,12,9,6] y = [99,86,87,88,1 ...
- 个股与指数的回归分析(自带python ols 参数解读)
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- 利用Spark-mllab进行聚类,分类,回归分析的代码实现(python)
Spark作为一种开源集群计算环境,具有分布式的快速数据处理能力.而Spark中的Mllib定义了各种各样用于机器学习的数据结构以及算法.Python具有Spark的API.需要注意的是,Spark中 ...
- $用python玩点有趣的数据分析——一元线性回归分析实例
Refer:http://python.jobbole.com/81215/ 本文参考了博乐在线的这篇文章,在其基础上加了一些自己的理解.其原文是一篇英文的博客,讲的通俗易懂. 本文通过一个简单的例子 ...
- 回归分析特征选择(包括Stepwise算法) python 实现
# -*- coding: utf-8 -*-"""Created on Sat Aug 18 16:23:17 2018 @author: acadsoc"& ...
随机推荐
- js入门关于js‘i++’‘++i’和‘i--’‘--i’计算的问题
一,i++和++i; i++是先赋值在运算,++i是先运算在赋值: 例如:var a=1 a++:在运算时是按照1计算的:但在下面再次出现时是按照2进行运算: ++a:在运算时是按照2计算的:在下面再 ...
- 初始化HTML样式(转载)
方式一 ;; } body { background:#fff; color:#555; font-size:14px; font-family: Verdana, Arial, Helvetica, ...
- req和resp常用的方法
req: 1. setAttribute()在Request域中存储数据 2. setCharacterEncoding()设置请求参数的编码方式,只对post请求有效 3. getMethod() ...
- scp断点续传
linux命令 rsync -P --rsh=ssh homefile.zip root@30.19.103.99:/home/remote.zip 这个命令的含义: -P 断点续传 -rsh ssh ...
- miniui的联动列表
function OnCellBeginEdit(e) { var grid = e.sender; var column = e.column; if (!column.parentfield) { ...
- http请求方法之options请求方法
需预检的请求”要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求. https://developer.mozilla.org/zh-CN/docs/W ...
- 005-docker启动设置环境变量
https://blog.csdn.net/wsbgmofo/article/details/79173920
- 友善RK3399/NanoPC-T4开发板wiringPi的C语言访问GPIO外设实例讲解 -【申嵌视频】
1 wiringPi简介 wiringPi库最早是由Gordon Henderson所编写并维护的一个用C语言写成的类库,除了GPIO库,还包括了I2C库.SPI库.UART库和软件PWM库等,由于w ...
- Optaplanner规划引擎的工作原理及简单示例(2)
开篇 在前面一篇关于规划引擎Optapalnner的文章里(Optaplanner规划引擎的工作原理及简单示例(1)),老农介绍了应用Optaplanner过程中需要掌握的一些基本概念,这些概念有且于 ...
- CSS Core Technology
1. Selector Different types of selectors: Selectors can be divided into the following categories: Si ...