IDL考试前复习笔记(一) 绘制散点图,并标注残差

前言
  由于IDL要考试所以记录下5个程序和他们的语法过程,也权当是复习了,其实写过一遍之后一下就记住了,尽量注解详细一些,主要是我的老巢被人发现了,只能方便你我他了。

需求分析

Created with Raphaël 2.2.0 程序开始 读入数据 x,y 绘制散点图 计算误差 根据误差绘图 散点图 程序结束

  首先,定义好文件名,并且利用read_csv的function读入csv,读入的data是一个结构体,即struct,所以需要点号去访问,是个2个数组组合成的结构体看下图

fn = 'C:\Users\黄\Desktop\scatterdata.csv'
   data = read_csv(fn)      ;csv读出来的是一个结构体需要抽变量的话需要用括号
   x = data.(0)
   y = data.(1)

在这里插入图片描述
所以用x = data.(0)拿出矩阵来,field1,field2就是字段。
  读出来之后进行绘图,绘图用的函数绘图法,即scatterplot,需要一个变量去记录这些信息(figure,axes,axis…)是一个结构体,所以用p

   p = scatterplot(x,y,dimensions = 	[1200,500],xtitle='x',ytitle='y',symbol = '+',$
   SYM_COLOR = 'red',position=[0.1,0.12,0.45,0.95] )
;y = kx + b一元线性方程
;regress函数所以a为k,b为偏移量,correlation为相关系数,yfit是拟合之后给出的y值。即经过这个方程给出的y值所以会有偏差
   a = regress(x,y,const = b,correlation = r,yfit = y_fitted)
   
;绘图
;返回最小值和最大值以便绘图
   x1 = min(x)          ;x1为最小值
   y1 = a*x1 + b  
   x2 = max(x)          ;x2为最大值
   y2 = a*x2 + b
   p1 = plot([x1,x2],[y1,y2],/overplot,/current)
   
;填充等式在图上,format = '5.3'表示5个字符宽度的单精度数字,保留到小数点后3;text为将内容补上去,坐标系为常用坐标系,所以
   
   streq = 'y=' + string(a,format ='(f5.3)') + '*x' + string(b,format='(f5.3)')
   streqcorrlation = 'r=' + string(r,format = '(f5.3)')
   t1 = text(0.05,4.8,streq,target = p,/data)
   t2 = text(0.05,4.6,streqcorrlation,target = p,/data)

dimensions为窗体的大小,symbol为符号的样式,sym_color为符号的颜色

position为矩阵,即返回的是[x1,y1,x2,y2],坐标是归一化的坐标,

regress函数,a为k,b为offset(偏移量),correlation为相关系数,yfit是拟合之后表达式根据原来x计算出的y‘的值。即经过这个拟合方程给出的y值所以会有偏差。

后续填充等式在图上,format = '5.3’表示5个字符宽度的单精度数字,保留到小数点后3位

text为题字,需要注意target需要指定你绘图的对象即p。

/data:如果在数据坐标中指定了输入参数,则设置此关键字。设置此关键字可将文本插入当前数据空间,否则文本将添加到注释图层。
这样就绘制完了第一幅图。

  绘制完第一幅图后绘制第二幅图。

    p3 = scatterplot(y,y_fitted,position = [0.57,0.12,0.97,0.95],symbol = '+',$
    sym_color = 'green',/current,xtitle = 'y' ,ytitle = 'y_fitted')
    p4 = plot([3.0,5.0],[3.0,5.0],/current,/overplot)
    MAE = mean(abs(y - y_fitted))
    RMSE = sqrt(mean((y-y_fitted)^2))
    strmae = 'MSE=' + string(MAE,format = '(f5.3)')
    strrmse = 'RMSE=' + string(rmse,format = '(f5.3)')
    t3 = text(3.15,4.8,strmae,target = p3 ,/data)
    t3 = text(3.15,4.6,strrmse,target = p3 ,/data)

p3为axes对象,此时坐标系仍为归一化的坐标,所以x从0.57开始
/current和/overplot必须使用,/current表示在当前的axes即p3绘图,/overplot表示继续绘制,否则会清空原来的图(联想MATLAB绘图这样想的,应该是酱把)。

MAE是平均绝对误差MAE(mean absolute error)是绝对误差的平均值,它其实是更一般形式的误差平均值。
M A E = ∑ i = 1 n ∣ y i − y ∣ n MAE=\dfrac{\sum \limits_{i=1}^n |y_i-y|}{n} MAE=ni=1nyiy
所以上面的mean函数取平均值,由于 y y y y f i t t e d y_{fitted} yfitted 都是矩阵,所以求减法之后返回值仍为矩阵,求平均值直接返回整个矩阵平矩值。

而均方根误差 RMSE(root mean squared error),也有资料称为RMSD,也可以测量误差的平均大小,它是预测值和实际观测之间平方差异平均值的平方根。

R M S E = ∑ i = 1 T ( y ^ − y ) 2 T RMSE= \dfrac{\sum \limits_{i=1}^T (\hat{y}-y)^2}{T} RMSE=Ti=1T(y^y)2
写表达式的时候可能容易错,仔细写表达式即可,最后与之前一样标注即可

结果

在这里插入图片描述

IDL里显示应该是没问题的,CSDN插图有点问题,鸽了鸽了,跑步去。

MAE、RMSE参考博客:
链接: https://blog.csdn.net/nanhuaibeian/article/details/102746602.

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值