首页 > 其他分享 >【scikit-learn基础】--『回归模型评估』之可视化评估

【scikit-learn基础】--『回归模型评估』之可视化评估

时间:2024-01-26 13:00:14浏览次数:18  
标签:set -- pred 模型 scikit 残差 import ax 评估

scikit-learn中,回归模型的可视化评估是一个重要环节。
它帮助我们理解模型的性能,分析模型的预测能力,以及检查模型是否存在潜在的问题。
通过可视化评估,我们可以更直观地了解回归模型的效果,而不仅仅依赖于传统的评估指标。

1. 残差图

所谓残差,就是实际观测值与预测值之间的差值。

残差图是指以残差为纵坐标,以任何其他指定的量为横坐标的散点图。
如果残差图中描绘的点围绕残差等于0的直线上下随机散布,说明回归直线对原观测值的拟合情况良好。反之,则说明回归直线对原观测值的拟合不理想。

下面做一个简单的线性回归模型,然后绘制残差图。

from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import PredictionErrorDisplay

fig, ax = plt.subplots(1, 2)
fig.set_size_inches(10, 4)

X, y = make_regression(n_samples=100, n_features=1, noise=10)
ax[0].scatter(X[:, 0], y, marker="o")
ax[0].set_title("样本数据")

# 初始化最小二乘法线性模型
reg = LinearRegression()
# 训练模型
reg.fit(X, y)
y_pred = reg.predict(X)

ax[0].plot(X, y_pred, color="red")
display = PredictionErrorDisplay(y_true=y, y_pred=y_pred)
ax[1].set_title("残差图")
display.plot(ax=ax[1])

plt.show()

image.png
左边是随机生成的样本数据,其中的红线是训练之后拟合的线性模型。
右边是根据scikit-learn中提供的PredictionErrorDisplay模块生成的残差图

2. 对比图

对比图将实际目标值与模型预测值进行对比,直观地展示模型的预测能力。
通常,我们希望看到实际值预测值沿着一条\(y=x\)的直线分布,这意味着模型预测非常准确。

下面用一些混乱度高的样本,来看看对比图的效果。

from sklearn.datasets import make_regression
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import PredictionErrorDisplay

fig, ax = plt.subplots(1, 2)
fig.set_size_inches(12, 6)

# 混乱度高,noise=100
X, y = make_regression(n_samples=100, n_features=1, noise=100)
ax[0].scatter(X[:, 0], y, marker="o")
ax[0].set_title("样本数据")

# 初始化最小二乘法线性模型
reg = LinearRegression()
# 训练模型
reg.fit(X, y)
y_pred = reg.predict(X)

ax[0].plot(X, y_pred, color="red")
display = PredictionErrorDisplay(y_true=y, y_pred=y_pred)
ax[1].set_title("对比图")
display.plot(ax=ax[1], kind="actual_vs_predicted")

plt.show()

image.png
原始样本比较混乱,线性模型很难拟合,所以看对比图就可以发现,真实值预测值差别很大。
越靠近对比图中间那个虚线的点,真实值预测值越接近。

换一个混乱程度低的样本,再看看对比图的效果。

# 混乱度 noise=10,比如上面那个示例降10倍
# 上面代码只改这一行,其它部分代码不用改
X, y = make_regression(n_samples=100, n_features=1, noise=10)

image.png
从图中也可以看出,这次的模型拟合效果要好很多。

3. 总结

可视化的图形向我们传达了模型预测的准确性、线性假设的满足程度、误差项的独立性以及特征对预测的影响程度等信息,让我们对模型有更深入的了解。

通过图形化的方式,帮助我们更直观地理解回归模型的性能,发现模型潜在的问题,指导我们改进模型。
不过,可视化评估虽然直观,但并不能完全替代传统的量化评估指标。
两者应该相互补充,共同构成对回归模型性能的全面评价。

标签:set,--,pred,模型,scikit,残差,import,ax,评估
From: https://www.cnblogs.com/wang_yb/p/17989093

相关文章

  • 在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
    我在前面随笔《在Winform系统开发中,对表格列表中的内容进行分组展示》,介绍了Winform程序中对表格内容进行了分组的展示,在WPF应用中,同样也可以对表格的内容进行分组展示,不过处理方式和Winform有所差异,本篇随笔同样基于SqlSugar开发框架的基础上,实现在WPF应用中实现DataGrid的分组显......
  • OOP
    OOP1.创建类name每个Python模块都包含内置的变量name,当模块运行时,__name__等于文件名(包含了后缀.py)如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)main“main”等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,name=='main'结果为真;而当......
  • 登录模块--小程序快捷登录
      静态结构//src/pages/login/login.vue<scriptsetuplang="ts">//</script><template><viewclass="viewport"><viewclass="logo"><imagesrc="https://pcapi-xiaotux......
  • 你不知道的Linux shell操作
    LinuxShell脚本入门教程LinuxShell脚本是一种强大的工具,它允许您自动化日常任务和复杂操作。在本教程中,我们将逐步介绍几个实用的Shell脚本示例。每个示例都将详细说明,以便即使是初学者也能轻松理解和应用。1.基础Shell脚本示例1:"HelloWorld"每个编程学习之旅都......
  • 如何实现高精度无线同步控制矿山爆破?
        随着现代社会工业化进程的不断加快,人们对于矿山开采的规模和速度要求越来越高。为了快速推进矿山的开采作业,人们对于炸yao威力的要求越来越高。    考虑到生产、运输和存储等各个方面的安全性以及国家有关方面的强制要求,雷管的火药填装量是有严格限制的,不允许......
  • 洛谷题单指南-排序-P1271 【深基9.例1】选举学生会
    原题链接:https://www.luogu.com.cn/problem/P1271题意解读:最直接的计数排序问题,借助一个桶h[N],对被投票的候选人x执行h[x]++,再按顺序遍历输出即可。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=1005;inth[N];intmain(){intn,m;......
  • 如何使用 JWT 在 Next.js 中实现令牌身份验证
       原文------------https://www.makeuseof.com/token-authentication-nextjs-using-jwt/原文                   ......
  • CTFer blogs--hash比较绕过
    1.PHP弱类型===和==的区别:===在进行比较时,会先判断类型是否相同,再进行比较== 在进行比较时,会先将字符串类型转化相同,再比较转换规则:字符串的开始部分决定了它的值,如果以合法的数值开始,则使用该数值,否则为0eg.admin==01admin=10e123456==0e456789 相互比较......
  • 记一次 .NET某工控自动化系统 崩溃分析
    一:背景1.讲故事前些天微信上有位朋友找到我,说他的程序偶发崩溃,分析了个把星期也没找到问题,耗费了不少人力物力,让我能不能帮他看一下,给我申请了经费,哈哈,遇到这样的朋友就是爽快,刚好周二晚上给调试训练营的朋友分享GC标记阶段相关知识,而这个dump所展示的问题是对这块知识的一个......
  • call方法,apply方法,和arguments对象
    //1.call方法//2.apply方法//3.arguments对象functionadd(a,b){console.log(a+b);}add(1,2);//call方法第一个参数是this指针,即调用者,第二个参数开始,就是原函数的实际参数add.call(null,10,20);//apply方法第一个参数是this指针,即调用者,第二个参数是一......