线性回归 10 种图表 上【建议收藏】

这段时间,不少同学提到了一些图表的问题。

每次在使用matplotlib画图,运用这些图表说明问题的时候,很多时候是模糊的,比如说什么时候画什么图合适?

其实这个根据你自己的需求,自己的想法来就行。

今天的话,我这里举例在线性回归中,最常用的一些图表,应该可以cover绝大多数情况了。其他算法模型适用的图表,咱们在后面再给大家进行总结~

至于数据集,表现方式,大家可以根据我给出的代码继续调整即可!

那么,在线性回归学习中,以下10种图表是很重要的:

  • 散点图

  • 线性趋势线图

  • 残差图(Residual plot)

  • 正态概率图

  • 学习曲线

  • 方差-偏差权衡图

  • 残差对预测值图

  • 部分回归图

  • 杠杆图

  • Cook's 距离图  

1,散点图

散点图(Scatter plot)是一种展示两个变量之间关系的图表。它通过在坐标系中以点的形式表示数据,其中每个点的位置由两个变量的值决定,从而展示它们之间的关系。

在线性回归中,散点图通常用于可视化数据集中两个变量之间的关系,并帮助我们判断是否适合使用线性模型进行建模。

咱们使用sklearn库中的load_diabetes数据集。然后,将选择数据集中的一个特征作为自变量X,另一个特征作为因变量y。后面的案例,也用这个数据集给大家进行演示。

from sklearn.datasets import load_diabetes# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target# 手动实现简单线性回归算法
def simple_linear_regression(X, y):# 计算均值X_mean = sum(X) / len(X)y_mean = sum(y) / len(y)# 计算斜率和截距numerator = sum((X - X_mean) * (y - y_mean))denominator = sum((X - X_mean) ** 2)slope = numerator / denominatorintercept = y_mean - slope * X_meanreturn slope, intercept# 获取回归直线的斜率和截距
slope, intercept = simple_linear_regression(X, y)

现在,画出散点图并添加回归直线。

import matplotlib.pyplot as plt# 绘制散点图
plt.scatter(X, y, color='blue', label='Data points')
# 添加回归直线
plt.plot(X, slope*X + intercept, color='red', label='Regression line')
plt.xlabel('X label')
plt.ylabel('y label')
plt.title('Scatter plot with regression line')
plt.legend()
plt.show()

为什么使用散点图?

因为散点图可以直观地展示数据的分布情况,同时通过添加回归直线,我们可以更好地理解数据的趋势和线性关系。这种图表有助于我们验证线性回归模型的有效性,并且可以用来预测新的数据点。

2,线性趋势线图

线性趋势线图(Linear trend line plot)是一种在散点图中添加一条直线来表示数据的线性趋势的图表。这条直线通常被称为趋势线或回归线,它可以帮助我们更清晰地看到数据的整体趋势,特别是在数据点分布较为杂乱或噪声较多时。

在线性回归中,线性趋势线图用于可视化数据集中自变量和因变量之间的线性关系,以及线性回归模型拟合的效果。

from sklearn.datasets import load_diabetes# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target# 手动实现简单线性回归算法
def simple_linear_regression(X, y):# 计算均值X_mean = sum(X) / len(X)y_mean = sum(y) / len(y)# 计算斜率和截距numerator = sum((X - X_mean) * (y - y_mean))denominator = sum((X - X_mean) ** 2)slope = numerator / denominatorintercept = y_mean - slope * X_meanreturn slope, intercept# 获取回归直线的斜率和截距
slope, intercept = simple_linear_regression(X, y)

现在,可以画出线性趋势线图来表示算法的效果。

import seaborn as sns
import matplotlib.pyplot as plt# 绘制线性趋势线图,样本点为红色,拟合线为蓝色
sns.regplot(x=X, y=y, color='red', scatter_kws={'color': 'blue', 's': 10})  # s设置散点的大小
plt.xlabel('X label')
plt.ylabel('y label')
plt.title('Linear trend line plot')
plt.show()

为什么使用线性趋势线图?

因为线性趋势线图可以帮助我们更直观地看到数据的整体趋势,特别是在数据点分布较为杂乱或噪声较多时,趋势线可以帮助我们更清晰地理解数据的线性关系,并验证线性回归模型的有效性。这种图表有助于我们预测新的数据点并评估模型的拟合效果。

3,残差图

残差图(Residual plot)通过将数据点的残差(预测值与实际值之间的差异)绘制在纵轴上,自变量的值(或者预测值)绘制在横轴上,来展示模型的拟合情况和误差分布。在理想情况下,残差应该随机地分布在横轴上,没有明显的模式,如果残差图显示出某种模式,则可能表示模型存在问题。

from sklearn.datasets import load_diabetes# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target# 手动实现简单线性回归算法
def simple_linear_regression(X, y):# 计算均值X_mean = sum(X) / len(X)y_mean = sum(y) / len(y)# 计算斜率和截距numerator = sum((X - X_mean) * (y - y_mean))denominator = sum((X - X_mean) ** 2)slope = numerator / denominatorintercept = y_mean - slope * X_meanreturn slope, intercept# 获取回归直线的斜率和截距
slope, intercept = simple_linear_regression(X, y)# 计算预测值
y_pred = slope * X + intercept# 计算残差
residuals = y - y_pred

现在,我们可以画出残差图来表示算法的效果。

import matplotlib.pyplot as plt# 绘制残差图
plt.scatter(X, residuals, color='blue')
plt.axhline(y=0, color='red', linestyle='--')  # 添加水平参考线
plt.xlabel('X label')
plt.ylabel('Residuals')
plt.title('Residual plot')
plt.show()

为什么使用残差图?

因为残差图可以帮助我们检验线性回归模型是否合适。在理想情况下,残差应该随机地分布在横轴上,没有明显的模式。如果残差图显示出某种模式(如残差随自变量增大而增大或减小),则可能表示模型存在问题,需要进一步改进。这种图表有助于我们评估模型的拟合效果和准确性。

4,正态概率图

正态概率图(Normal probability plot)是一种用于检验数据是否符合正态分布的图表。在正态概率图中,将数据的标准化值(即Z分数)绘制在纵轴上,理论上的正态分布的分位数对应值(即标准正态分布的分位数)绘制在横轴上。如果数据符合正态分布,那么点应该沿着一条直线大致分布。

在线性回归中,正态概率图用于检验模型的残差是否符合正态分布。如果残差符合正态分布,则说明模型的假设是合理的,可以进行进一步的分析和预测。

from sklearn.datasets import load_diabetes# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target# 手动实现简单线性回归算法
def simple_linear_regression(X, y):# 计算均值X_mean = sum(X) / len(X)y_mean = sum(y) / len(y)# 计算斜率和截距numerator = sum((X - X_mean) * (y - y_mean))denominator = sum((X - X_mean) ** 2)slope = numerator / denominatorintercept = y_mean - slope * X_meanreturn slope, intercept# 获取回归直线的斜率和截距
slope, intercept = simple_linear_regression(X, y)# 计算预测值
y_pred = slope * X + intercept# 计算残差
residuals = y - y_pred

现在,画出正态概率图来表示算法的效果。

import scipy.stats as stats
import matplotlib.pyplot as plt# 绘制正态概率图
stats.probplot(residuals, dist="norm", plot=plt)
plt.xlabel('Theoretical quantiles')
plt.ylabel('Ordered residuals')
plt.title('Normal probability plot')
plt.show()

为什么使用正态概率图?

因为正态概率图可以帮助我们检验模型的残差是否符合正态分布。如果点大致沿着一条直线分布,那么残差就符合正态分布,说明模型的假设是合理的。这种图表有助于我们验证模型的假设,评估模型的拟合效果和准确性。

5,学习曲线

学习曲线(Learning curve)是一种展示模型在训练集和验证集上表现随训练样本数量变化的图表。它通常将训练集和验证集的误差(如均方误差)或准确率作为纵轴,训练样本数量作为横轴,可以帮助我们分析模型的拟合情况和泛化能力。

在线性回归中,学习曲线可以帮助我们判断模型是否过拟合或欠拟合。 当模型在训练集上表现良好但在验证集上表现较差时,可能存在过拟合;而当模型在两个集合上表现都较差时,可能存在欠拟合。通过观察学习曲线,可以调整模型的复杂度或者增加训练样本数量来改善模型的表现。

from sklearn.datasets import load_diabetes
from sklearn.model_selection import learning_curve
from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt# 加载数据集
diabetes = load_diabetes()
X = diabetes.data[:, 2]  # 使用第三个特征作为自变量
y = diabetes.target# 创建线性回归模型
model = LinearRegression()# 计算学习曲线
train_sizes, train_scores, valid_scores = learning_curve(model, X[:, np.newaxis], y, train_sizes=[50, 100, 200, 300], cv=5)# 计算训练集和验证集的平均误差
train_mean = np.mean(train_scores, axis=1)
train_std = np.std(train_scores, axis=1)
valid_mean = np.mean(valid_scores, axis=1)
valid_std = np.std(valid_scores, axis=1)# 绘制学习曲线
plt.figure(figsize=(10, 6))
plt.fill_between(train_sizes, train_mean - train_std, train_mean + train_std, alpha=0.1, color="r")
plt.fill_between(train_sizes, valid_mean - valid_std, valid_mean + valid_std, alpha=0.1, color="g")
plt.plot(train_sizes, train_mean, 'o-', color="r", label="Training score")
plt.plot(train_sizes, valid_mean, 'o-', color="g", label="Cross-validation score")
plt.xlabel("Training examples")
plt.ylabel("Score")
plt.title("Learning curve")
plt.legend(loc="best")
plt.show()

为什么使用学习曲线?

因为学习曲线可以帮助我们分析模型在不同训练样本数量下的表现,进而判断模型是否过拟合或欠拟合。通过观察学习曲线,我们可以选择合适的模型复杂度或增加训练样本数量来改善模型的表现,从而提高模型的泛化能力。这种图表有助于我们优化模型并提高预测的准确性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/13978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不是人人都懂的学习要点

不是人人都懂的学习要点_什么叫独特?别人都学的东西,人人都懂的东西咱就不学了,学别人知道的少的东西-CSDN博客

高光谱成像技术简介,怎么选择成像方案?

目录 一、什么是光谱?二、光谱和光谱分析方法的类型三、多光谱和高光谱的区别四、高光谱在水果品质检测中的应用1. 高光谱成像系统2. 高光谱图像的获取方式3. 高光谱图像处理与分析4. 在水果品质检测中的应用总结 五、针对自己的应用场景怎么使用高光谱技术六、参考…

海山数据库(He3DB)从方法到实践,构建以场景为中心的体验管理体系

编者按:体验优化的过程中设计师经常会遇到几个阶段,发现问题、定义问题、优化问题、查看反馈,但在产品快速迭代的过程中,体验的问题经常被归类到“不紧急”需求中,并逐步转为长尾问题,这些不被重视的问题聚…

重组蛋白表达中的质粒构建流程-卡梅德生物

我们在进行重组蛋白表达服务时,首先要根据序列特点合成基因并构建到合适的载体上。重组蛋白表达中的质粒构建是一个复杂但关键的过程,它涉及到将目标基因(即编码所需蛋白质的基因)插入到适当的质粒载体中,以便在后续的…

【OpenGL实践10】关于几何着色器

目录 一、说明 二、几何着色器 2.1 设置 2.2 基本几何着色器 2.2.1 输入类型 2.2.2 输出类型 2.2.3 顶点输入 2.2.4 顶点输出 2.3 创建几何着色器 2.4 几何着色器和顶点属性 三、动态生成几何体 四、结论 练习 一、说明 几何着色器的应用比较高级,关于…

Epson推出的FC2012AN晶体专为小尺寸、低ESR应用设计

在可穿戴设备、loT产品、无线通信模块等领域,对于小型化、低功耗和高精度的时钟需求日益增长。Epson推出的FC2012AN系列晶体单元凭借其小尺寸、低ESR等特性使其成为这些应用的理想选择。 FC2012AN系列是一款32.768K频率的晶体单元,频率偏差为 20x10-6…

【云原生】kubernetes中的service原理、应用实战案例解析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

DSPy - prompt 优化

文章目录 一、关于 DSPy与神经网络的类比常见问题解答**DSPy 优化器可以调整什么?****我应该如何使用 DSPy 完成我的任务?****如果我对提示或合成数据生成有更好的想法怎么办?**DSPy 代表什么? 二、安装三、文档A) 教程B) 指南C) …

Python列表推导式:简洁与高效的编程艺术

Python列表推导式:简洁与高效的编程艺术 在Python编程世界中,列表推导式(List Comprehension)无疑是一个强大而实用的工具。它允许我们以简洁、易读的方式快速生成列表,减少了编写循环和条件语句的需要。本文将详细介…

全球手游4月战报,《Monopoly GO!》荣耀再续!全球手游畅销榜冠军

易采游戏网5月22日消息,在刚刚过去的四月里,全球移动游戏市场的角逐愈发激烈。根据最新发布的数据,Scopely旗下的经典游戏《Monopoly GO!》再次蝉联全球手游畅销榜首冠军宝座,展现了无与伦比的市场魅力与玩家黏度。 4月Scopely《M…

中霖教育怎么样?二建继续教育几年一次?

中霖为大家介绍: 根据相关规定,二级建造师执业资格注册证书设定有效期限为三年。为确保持证人员的专业能力,在规定的期限内需要完成规定的继续教育课程并参加考核,以此来维护其职业资质的连续性。 在执业资格证书的有效期满前&a…

zabbix从6.0.x升级到6.0.x

一、升级原因 这两天安全方面暴露了zabbix的版本漏洞,具体漏洞信息如下: Zabbix Server Audit Log SQL 注入漏洞预警 近日,某机构获取到Zabbix Server组件中修复了一个SQL注入漏洞(CVE-2024-22120)&#xff0c…

redis小知识

AOF与RDB的区别 AOF (Append Only File) 和 RDB (Redis Database) 都是Redis中的持久化机制,但有以下几点不同之处: 内容格式:AOF 以日志的形式记录所有写操作命令,而 RDB 则是在指定的时间间隔内对数据库进行快照,将数…

WDW-100G 高温拉力试验机 技术方案书

一、整机外观图: 二、项目简介: 微机控制高温拉力试验机是电子技术与机械传动相结合的新型材料试验机,它具有宽广准确的加载速度和测力范围,对载荷、变形、位移的测量和控制有较高的精度和灵敏度,还可以进行等速加载、…

FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.1 音视频编码的发展历程”介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频文件还是网络直播,H.264标准都占据着可观的市场份额。 之所以H.264取得了巨大…

CDLinux下载网站

CDlinux - Browse /CDlinux-ISO at SourceForge.net

9.2 字符串拼接

字符串拼接 使用运算符拼接字符串 使用加号""运算符,可将几个较小的字符串拼接成一个更大的字符串,其拼接的前后顺序严格遵循每个字符串在加法表达式中出现的顺序。 s : "北冥有鱼,其名为鲲。"s s 鲲之大&#xff0…

用神经网络预测三角形的面积

周末遛狗时,我想起一个老问题:神经网络能预测三角形的面积吗? 神经网络非常擅长分类,例如根据花瓣长度和宽度以及萼片长度和宽度预测鸢尾花的种类(setosa、versicolor 或 virginica)。神经网络还擅长一些回…

2024中青杯A题数学建模成品文章数据代码分享

人工智能视域下养老辅助系统的构建 摘要 随着全球人口老龄化的加剧,养老问题已经成为一个世界性的社会问题,对社会各个方面产生了深远影响,包括劳动力市场、医疗保健和养老金制度等。人口结构变化对养老服务的质量和覆盖面提出了更高要求。特…

Python 爬虫编写入门

一、爬虫概述 网络爬虫(Web Crawler)或称为网络蜘蛛(Web Spider),是一种按照一定规则,自动抓取互联网信息的程序或者脚本。它们可以自动化地浏览网络中的信息,通过解析网页内容,提取…