目录

一、写在前面

二、数据

三、代码-多元线性回归

3.1 导入库

3.2 导入数据

3.3 多元线性回归模型

3.3.1 多元线性回归-OLS

3.3.2 多元线性回归模型预测值相对误差

3.3.3 残差图

3.3.4 预测值与真实值分布图

四、代码-响应曲面

4.1 高斯消元

4.2 响应曲面绘制代码

4.3 调用matching_3D绘制响应曲面



一、写在前面

多项式回归结合响应面分析方法,可以利用响应面图直观反应复杂的三维关系,从而清晰呈现两个自变量和一个因变量之间关系的技术方法。

二、数据

除25组数据外,还加一组自然情况下的基准数据 :

No.   Temperature pH  Fe2+ Cu2+ Fe3+  Y
30 6.5 0 0 7.55

三、代码-多元线性回归

3.1 导入库

from mpl_toolkits.mplot3d.axes3d import Axes3D
from matplotlib import cm
from pylab import *
from numpy import *
import matplotlib.pyplot as plt
import pandas as pd
import math
import numpy as np
import copy
plt.rcParams['axes.unicode_minus']=False  #用于解决不能显示负号的问题
mpl.rcParams['font.sans-serif'] = ['SimHei']

3.2 导入数据

#26
xArr = [[1,30,6.5,0,0,0],[1,30,1.5,0,0,0],[1,30,2,1,3,1],[1,30,2.25,3,5,3],[1,30,2.27,5,8,5],[1,30,2.41,8,10,8],[1,35,1.5,1,5,5],[1,35,2,3,8,8],[1,35,2.5,5,10,0],[1,35,3,8,0,1],[1,35,2.61,0,3,3],[1,40,1.5,3,10,1],[1,40,2,5,0,3],[1,40,2.5,8,3,5],[1,40,2.28,0,5,8],[1,40,3.23,1,8,0],[1,45,1.5,5,3,8],[1,45,2,8,5,0],[1,45,2.5,0,8,1],[1,45,2.44,1,10,3],[1,45,2.26,3,0,5],[1,50,1.5,8,8,3],[1,50,2,0,10,5],[1,50,2.17,1,0,8],[1,50,3,3,3,0],[1,50,2.82,5,5,1]
]#26
yArr = [7.55,7.14,7.2,7.05,6.82,6.51,6.73,6.69,6.46,6.75,6.70,6.55,6.3,6.21,6.18,5.97,5.95,5.9,5.5,5.72,5.6,5.62,5.29,5.57,5.30,5.21]# print(len(xArr),len(yArr))

3.3 多元线性回归模型

3.3.1 多元线性回归-OLS

这里插一点和题目不相关的东西,像这种有许多X与对应的Y的数据,可以考虑进行多元线性回归

回归代码如下:(最小二乘法)

#最小二乘法 OLS
def standRegres(xArr,yArr):xMat = mat(xArr)yMat = mat(yArr).TxTx = xMat.T*xMatif linalg.det(xTx) == 0.0:print("This matrix is singular, cannot do inverse")returnws = xTx.I * (xMat.T*yMat)
#     print(ws)return ws

3.3.2 多元线性回归模型预测值相对误差

采用多元线性回归方程对验证每组数据相对误差:

mySum = 0
sse = 0
yPerList = []#采用全部数据进行训练
ws = standRegres(xArr,yArr)          #ws即为方程系数
print(ws)
for index,x in enumerate(xArr):yPer = float(x*ws)               #yPer即为预测值yPerList.append(yPer)           mySum += abs(yPer-yArr[index])*100sse = (yPer-yArr[index])**2 error = abs(yPer-yArr[index])/yArr[index]*100       #相对误差
#     print(yArr[index],round(yPer,2),str(round(error,2))+"%")plt.plot(index,error,"o")plt.title("                            ",fontsize=13) #图片上方留白
plt.rc('font',family='Arial')                         #设置字体
plt.rcParams['xtick.direction'] = 'in'                #刻度线朝内
plt.rcParams['ytick.direction'] = 'in'
plt.tick_params(labelsize=18)                         #刻度大小
plt.xlabel("Test No.",fontsize=18)
plt.ylabel("Relative Error/%",fontsize=18)
plt.savefig("线性回归模型各拟合值相对误差",dpi=500,bbox_inches = 'tight') #dpi-清晰度
plt.show()print("SSE=",sse,"平均相对误差=",round(mySum/sum(yArr),2))
print(corrcoef(yPerList,yArr)[0][1])

效果:

3.3.3 残差图

相关代码:

#残差图
mySum = 0
sse = 0
yPerList = []#采用全部数据进行训练
ws = standRegres(xArr,yArr)
# print(ws)
for index,x in enumerate(xArr):yPer = float(x*ws)residua = yArr[index] - yPerplt.plot(index,residua,"bo")x = np.linspace(0,25,100)plt.plot(x,np.zeros(len(x)),"r")plt.title("                          ",fontsize=13)
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.rc('font',family='Arial')
plt.tick_params(labelsize=18)
plt.xlabel("Test No.",fontsize=18)
plt.ylabel("Residua",fontsize=18)
plt.ylim((-0.5, 0.5))
plt.savefig("残差图.jpg",dpi=500,bbox_inches = 'tight')
plt.show()

效果:

3.3.4 预测值与真实值分布图

相关代码:

#分布图
mySum = 0
sse = 0
yPerList = []#采用全部数据进行训练
ws = standRegres(xArr,yArr)
# print(ws)
for index,x in enumerate(xArr):yPer = float(x*ws)yPerList.append(yPer)
plt.plot(list(range(len(xArr))),yPerList,"bo",label="Fitted value")
plt.plot(list(range(len(xArr))),yArr,"r*",label="Measurement value")plt.title("                              ",fontsize=13)
plt.rc('font',family='Arial')
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.tick_params(labelsize=18)
plt.legend(framealpha=0,loc=(0.45, 0.55),fontsize=15)
plt.xlabel("Test No.",fontsize=18)
plt.ylabel("Oxygen solubility/mg·${{L^-}^1}$",fontsize=18)
plt.savefig("分布图.jpg",dpi=500,bbox_inches = 'tight')
plt.show()

效果:

四、代码-响应曲面

4.1 高斯消元

相关代码:

#最小二乘法曲面拟合
def fun(x): round(x, 2)if x >= 0:return '+'+str(x)else:return str(x)def get_res(X, Y, Z, n):# 求方程系数sigma_x = 0for i in X: sigma_x += isigma_y = 0for i in Y: sigma_y += isigma_z = 0for i in Z: sigma_z += isigma_x2 = 0for i in X: sigma_x2 += i * isigma_y2 = 0for i in Y: sigma_y2 += i * isigma_x3 = 0for i in X: sigma_x3 += i * i * isigma_y3 = 0for i in Y: sigma_y3 += i * i * isigma_x4 = 0for i in X: sigma_x4 += i * i * i * isigma_y4 = 0for i in Y: sigma_y4 += i * i * i * isigma_x_y = 0for i in range(n):sigma_x_y += X[i] * Y[i]# print(sigma_xy)sigma_x_y2 = 0for i in range(n): sigma_x_y2 += X[i] * Y[i] * Y[i]sigma_x_y3 = 0for i in range(n): sigma_x_y3 += X[i] * Y[i] * Y[i] * Y[i]sigma_x2_y = 0for i in range(n): sigma_x2_y += X[i] * X[i] * Y[i]sigma_x2_y2 = 0for i in range(n): sigma_x2_y2 += X[i] * X[i] * Y[i] * Y[i]sigma_x3_y = 0for i in range(n): sigma_x3_y += X[i] * X[i] * X[i] * Y[i]sigma_z_x2 = 0for i in range(n): sigma_z_x2 += Z[i] * X[i] * X[i]sigma_z_y2 = 0for i in range(n): sigma_z_y2 += Z[i] * Y[i] * Y[i]sigma_z_x_y = 0for i in range(n): sigma_z_x_y += Z[i] * X[i] * Y[i]sigma_z_x = 0for i in range(n): sigma_z_x += Z[i] * X[i]sigma_z_y = 0for i in range(n): sigma_z_y += Z[i] * Y[i]# print("-----------------------")# 给出对应方程的矩阵形式a = np.array([[sigma_x4, sigma_x3_y, sigma_x2_y2, sigma_x3, sigma_x2_y, sigma_x2],[sigma_x3_y, sigma_x2_y2, sigma_x_y3, sigma_x2_y, sigma_x_y2, sigma_x_y],[sigma_x2_y2, sigma_x_y3, sigma_y4, sigma_x_y2, sigma_y3, sigma_y2],[sigma_x3, sigma_x2_y, sigma_x_y2, sigma_x2, sigma_x_y, sigma_x],[sigma_x2_y, sigma_x_y2, sigma_y3, sigma_x_y, sigma_y2, sigma_y],[sigma_x2, sigma_x_y, sigma_y2, sigma_x, sigma_y, n]])b = np.array([sigma_z_x2, sigma_z_x_y, sigma_z_y2, sigma_z_x, sigma_z_y, sigma_z])# 高斯消元解线性方程res = np.linalg.solve(a, b)return reslabelName = ["Oxygen solubility/mg·${{L^-}^1}$","T/$^\circ$C","pH","c(${{Fe^2}^+}$)/g·${{L^-}^1}$","c(${{Cu^2}^+}$)/g·${{L^-}^1}$","c(${{Fe^3}^+}$)/g·${{L^-}^1}$",]
print(labelName)

4.2 响应曲面绘制代码

绘图的核心代码在这里,感兴趣的自己研究研究吧

变量res的系数就是用4.1节的高斯消元算法生成的系数

def matching_3D(X, Y, Z,xLabelIndex,yLabelIndex,name,arg1=37,arg2=-72):n = len(X)res = get_res(X, Y, Z, n)# 输出方程形式print("z=%.6s*x^2%.6s*xy%.6s*y^2%.6s*x%.6s*y%.6s" % (fun(res[0]), fun(res[1]), fun(res[2]), fun(res[3]), fun(res[4]), fun(res[5])))# 画曲面图和离散点fig = plt.figure()  # 建立一个空间ax = fig.add_subplot(111, projection='3d')  # 3D坐标xgrid = np.linspace(min(X),max(X),100)ygrid = np.linspace(min(Y),max(Y),100)x,y = np.meshgrid(xgrid,ygrid)# 给出方程z = res[0] * x * x + res[1] * x * y + res[2] * y * y + res[3] * x + res[4] * y + res[5]# 画出曲面sp = ax.plot_surface(x, y, z, rstride=3, cstride=3, cmap=cm.jet)ax.contourf(x,y,z,zdir='z',offset=5,cmap = plt.get_cmap('rainbow'))# 画出点ax.scatter(X, Y, Z, c='r',label="实测点",alpha=0)plt.rc('font',family='Arial')plt.xlabel(labelName[xLabelIndex])plt.xticks(rotation=30,fontsize=9)plt.ylabel(labelName[yLabelIndex])ax.set_zlabel(labelName[0])#     show_text(ax)
#     ax.legend()fig.colorbar(sp)ax.view_init(elev=arg1, azim=arg2)plt.rcParams['xtick.direction'] = 'in'plt.rcParams['ytick.direction'] = 'in'plt.savefig(name,dpi=500,bbox_inches = 'tight')fig.show()

4.3 调用matching_3D绘制响应曲面

代码:

和4.2节matching_3D的参数对照看:

X与Y为自变量列表-分别为X轴与Y轴

yArr为因变量-Z轴坐标

1、4即为对应4.1节中labelName列表对应的名字 ,用于自动生成响应的坐标名称

T-cu2+即为保存的图片文件名

37,-72用于调整图片视角

%matplotlib notebook
X = []
Y = []
for x,y in zip(xArrMat[:,1],xArrMat[:,4]):X.append(float(x))Y.append(float(y))
matching_3D(X,Y,yArr,1,4,"T-cu2+曲面图",37,-72)

效果:

论文绘图-教你如何绘制响应面相关推荐

  1. 论文绘图软件和论文赶稿注意事项+ESLWriter自助写论文+论文排版和LaTeX书写方法介绍

    1.论文绘图软件 第10名:锯齿风Matlab Matlab只排在第十位是因为本来它就不是一个用来做画图的软件.人家的主要功能是矩阵操作.统筹优化.数学实验.仿真模拟(此处省略一万字)等等好吗?用ma ...

  2. 这些论文绘图软件,你一个都不会用

    这些论文绘图软件,你一个都不会用 量化研究方法 引言 众所周知,高水平的配图可以令论文.报告等显得耳目一新,瞬间提高一个档次.写文章.做报告,搞好配图已经成为了又一项标配技能.从大量的数据资料中获得所 ...

  3. matlab学位论文绘图美化工具_推荐几个超级好用的工具,让你在论文中画出漂亮的插图...

    每次我们看到优秀期刊中的文章,比如<Nature>.<Cell>,我们都会被文章中的插图惊艳到.再瞅瞅我们自己论文中的插图,总觉得比别人low了好几个c层次.一个好看的插图绝对 ...

  4. 计算机专业做ps毕业设计,毕业设计系列 | (电脑效果图篇)效果图大神一步步的教你电脑绘制过程!...

    原标题:毕业设计系列 | (电脑效果图篇)效果图大神一步步的教你电脑绘制过程! (▲叁木服装艺术工作室出品) 在现在这种数字时代 什么东西都讲究效率和便捷 电脑绘制服装效果图已经全面的取代了手绘效果图 ...

  5. matlab学位论文绘图美化工具_学术论文绘图matlab版

    论文绘图是完成学术论文的一个重要环节,美观的插图能够更好地阐述结论和有效地提升文章质量.学术论文中常见的插图包括:框架图,算法说明图,数据分析图,以及实物图.常见的绘图工具中包括Matlab,pyth ...

  6. 论文绘图——标量图篇

    首先说下我对论文中的标量图(位图)的理解,需要借助其它软件生成的基础图和实验代码运行结果图.我觉得只有这两类图按标量图绘制.其它可以自己画的建议使用矢量图(展示效果更清晰). 一.对于方法描述需要的示 ...

  7. iOS:quartz2D绘图(给图形绘制阴影)

    quartz2D既可以绘制原始图形,也可以给原始图形绘制阴影. 绘制阴影时,需要的一些参数:上下文.阴影偏移量.阴影模糊系数 注意:在drawRect:方法中同时调用绘制同一个图形时,在对绘制的图形做 ...

  8. [Qt教程] 第15篇 2D绘图(五)绘制图片

    [Qt教程] 第15篇 2D绘图(五)绘制图片 楼主  发表于 2013-5-2 17:59:00 | 查看: 886| 回复: 3 绘制图片 版权声明 该文章原创于Qter开源社区(www.qter ...

  9. [Qt教程] 第14篇 2D绘图(四)绘制路径

    [Qt教程] 第14篇 2D绘图(四)绘制路径 楼主  发表于 2013-4-27 12:40:52 | 查看: 611| 回复: 0 绘制路径 版权声明 该文章原创于Qter开源社区(www.qte ...

  10. [Qt教程] 第13篇 2D绘图(三)绘制文字

    [Qt教程] 第13篇 2D绘图(三)绘制文字 楼主  发表于 2013-4-25 23:04:46 | 查看: 720| 回复: 0 绘制文字 版权声明 该文章原创于Qter开源社区,作者yafei ...

最新文章

  1. 权限表管理之更新权限表数据
  2. windows和linux文件的转换
  3. 堆、栈、方法区、直接内存
  4. 线段树练习——区间合并
  5. matlab 低秩矩阵分解,低秩分解的matlab代码看不懂,分解的两个矩阵在哪呀??...
  6. liblapack.so.3: undefined symbol: gotoblas错误及解决办法
  7. wifi信号手机测试软件,专业的WiFi检测工具有哪些?如何解决wifi信号不好?
  8. php 变量类型 typeof,typeof和instanceof的区别是什么
  9. jQuery Mobile主题使用与定制
  10. php标签class,dede模板标签以及dedetag.class.php模板类使用方法
  11. Internet Explorer更改MIME处理方式以提高安全性
  12. 网络地址转换—NAT——总结
  13. 如何看待腾讯市值(按 2012 年 8 月 17 日股价)超过 Facebook?
  14. 在QCreator IDE中 使用 Orge3D
  15. 神经网络与PyTorch:线性回归
  16. Julia 机器学习 ---- 单变量线性回归 和 多元线性回归 (Linear regression)
  17. wangEditor 5 - 修改工具栏 toolbar 默认背景色(去掉背景颜色改为透明)
  18. c语言成绩与平均分问题,用C语言编程平均分数
  19. 安卓开发之视频播放器
  20. 去哪儿网2015校园招聘前端笔试题

热门文章

  1. 信号与系统—傅里叶级数
  2. 即时通讯源码/im源码uniapp基于在线聊天系统附完整搭建部署教程
  3. 软考论文-高项-进度管理、风险管理
  4. Ubuntu 14.04 LTS 安装 文泉驿微米黑 字体到android studio
  5. app抓包工具_【旧版IPA抓包教程2】超便捷苹果旧版本APP抓包/轻松抓取你想要的版本,旧版app任意下载...
  6. 微信小程序商城模板平台分享
  7. 基于安卓实现的模拟定位功能(Android)
  8. 【PSFTP】Windows从Linux获取文件或目录
  9. Tomcat原理系列之一:整体架构,抓住主线
  10. 【Python实践】Python部分实际案例解答1