【scikit-learn基础】--『回归模型评估』之可视化评估
在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()

左边是随机生成的样本数据,其中的红线是训练之后拟合的线性模型。
右边是根据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()

原始样本比较混乱,线性模型很难拟合,所以看对比图就可以发现,真实值和预测值差别很大。
越靠近对比图中间那个虚线的点,真实值和预测值越接近。
换一个混乱程度低的样本,再看看对比图的效果。
# 混乱度 noise=10,比如上面那个示例降10倍
# 上面代码只改这一行,其它部分代码不用改
X, y = make_regression(n_samples=100, n_features=1, noise=10)

从图中也可以看出,这次的模型拟合效果要好很多。
3. 总结
可视化的图形向我们传达了模型预测的准确性、线性假设的满足程度、误差项的独立性以及特征对预测的影响程度等信息,让我们对模型有更深入的了解。
通过图形化的方式,帮助我们更直观地理解回归模型的性能,发现模型潜在的问题,指导我们改进模型。
不过,可视化评估虽然直观,但并不能完全替代传统的量化评估指标。
两者应该相互补充,共同构成对回归模型性能的全面评价。
【scikit-learn基础】--『回归模型评估』之可视化评估的更多相关文章
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- 逻辑回归模型(Logistic Regression, LR)基础
逻辑回归模型(Logistic Regression, LR)基础 逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函 ...
- 『高性能模型』轻量级网络ShuffleNet_v1及v2
项目实现:GitHub 参考博客:CNN模型之ShuffleNet v1论文:ShuffleNet: An Extremely Efficient Convolutional Neural Netwo ...
- 回归模型效果评估系列1-QQ图
(erbqi)导语 QQ图全称 Quantile-Quantile图,也就是分位数-分位数图,简单理解就是把两个分布相同分位数的值,构成点(x,y)绘图:如果两个分布很接近,那个点(x,y)会分布在y ...
- 『高性能模型』HetConv: HeterogeneousKernel-BasedConvolutionsforDeepCNNs
论文地址:HetConv 一.现有网络加速技术 1.卷积加速技术 作者对已有的新型卷积划分如下:标准卷积.Depthwise 卷积.Pointwise 卷积.群卷积(相关介绍见『高性能模型』深度可分离 ...
- 『高性能模型』轻量级网络MobileNet_v2
论文地址:MobileNetV2: Inverted Residuals and Linear Bottlenecks 前文链接:『高性能模型』深度可分离卷积和MobileNet_v1 一.Mobil ...
- 20165308『网络对抗技术』Exp5 MSF基础应用
20165308『网络对抗技术』Exp5 MSF基础应用 一.原理与实践说明 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实 ...
- 2017-2018-2 20155303『网络对抗技术』Exp9:Web安全基础
2017-2018-2 『网络对抗技术』Exp9:Web安全基础 --------CONTENTS-------- 一.基础问题回答 1.SQL注入攻击原理,如何防御? 2.XSS攻击的原理,如何防御 ...
- 2017-2018-2 20155303『网络对抗技术』Exp8:Web基础
2017-2018-2 『网络对抗技术』Exp8:Web基础 --------CONTENTS-------- 一.原理与实践说明 1.实践具体要求 2.基础问题回答 二.实践过程记录 1.Web前端 ...
随机推荐
- OpenSSL 升级、回滚
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with ...
- PPT 光效果
点状.线状.面状.光影 "光" = PPT高大上的秘密
- Jenkins Pipeline 流水线 - 声明式 Demo
Jenkins Pipeline 流水线 流水线既能作为任务的本身,也能作为 Jenkinsfile 使用流水线可以让我们的任务从UI手动操作,转换为代码化,像dockerfile 一样.从shell ...
- JVM学习-自动内存管理
文章原文:https://gaoyubo.cn/blogs/6997cf1f.html 一.运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域 ...
- C# RSA 非对称加密
代码: RSAHelper.cs(RSA加密工具类): using System; using System.Security.Cryptography; using System.Text; nam ...
- Windows下如何查看某个端口被占用,以及如何杀死某个进程
查看所有端口 netstat -ano 如何查看某个特定端口的占用情况,比如 8080 netstat -ano|findstr "8080" 杀死一个进程 在查看某个端口被占用的 ...
- mybatis-plus数据批量插入
为了提高数据处理效率,大量数据需要插入数据时可以采用批量数据插入的策略提高数据插入的效率. 如下是实现方法 1.代码结构 2.实体类 package little.tiger.one.applicat ...
- Threejs实现一个园区
一.实现方案 单独贴代码可能容易混乱,所以这里只讲实现思路,代码放在最后汇总了下. 想要实现一个简单的工业园区.主要包含的内容是一个大楼.左右两片停车位.四条道路以及多个可在道路上随机移动的车辆.遇到 ...
- poj 3268 最短路
***题意:在x这个点有个聚会,其他的点要到x这个点,然后再会自己原始的点,求一来一回最大的那个距离 做法:两边dijstra算法,因为是单向图,要注意更新顺序*** #include<iost ...
- JavaScriptif while for switch流程控制 JS函数 内置对象
1,if else语句 2,if else if else语句 3,switch语句 4,for循环 5,while循环 6,三元运算 7,JS中的函数 8,JS中的匿名函数 9,JS中的立即执行函数 ...