基于Python代码的相关性热力图,VIF共线性诊断图及残差四图的使用及解释
注:热力图和共线性诊断图易看易解释,这里不再阐述
残差四图(Residuals vs Fitted Plot,Normal Q-Q Plot,Scale-Location Plot,Cook's Distance Plot)
各种现象的相关解释如下:
Residuals vs Fitted Plot(残差与拟合值散点图):
这个图用于帮助检验回归模型的线性关系假设。在这个图中,我们会将模型的残差(观测值与预测值之间的差异)与模型的拟合值(预测值)进行比较,理想情况下,残差应该随着拟合值的增加而随机分布在0附近,没有明显的模式或趋势。如果残差呈现出某种趋势,可能意味着模型的线性关系假设不成立。Normal Q-Q Plot(正态概率图):
这个图用于检验模型残差是否符合正态分布。在这个图中,残差的排序值会和一个理论的正态分布进行比较,理想情况下,残差点应该落在一条直线上,如果残差点偏离直线,可能表示残差不符合正态分布。Scale-Location Plot(标准化残差与拟合值的散点图):
这个图也称为“Spread-Location”图,用于检验模型的同方差性假设。在这个图中,我们会将标准化残差的绝对值开方(以消除负值)与拟合值进行比较,理想情况下,点应该在一条水平线上分布,如果点呈现出聚集或特定的模式,可能意味着同方差性不成立。Cook’s Distance Plot(库克距离图):
这个图用于识别在回归模型中对结果产生显著影响的个别观测值。Cook’s Distance是一种衡量数据点影响的统计量,这个图可以显示每个数据点的Cook’s Distance值,通常我们会关注那些Cook’s Distance远高于平均水平的数据点,它们可能是影响模型准确性的异常值或离群点。
综合使用这四种图可以帮助分析师评估线性回归模型的准确性、假设是否成立以及是否存在异常值,从而提高建模的质量和可靠性。
1>封装好的代码如下:
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.formula.api as smf
import pandas as pd
from statsmodels.formula.api import ols
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False def Corr_heatmap(data):
# import matplotlib.pyplot as plt
# import seaborn as sns
#相关性分析
print(data.corr())
#画出热力图
plt.figure(figsize=(7,5),dpi=128)
sns.heatmap(data.corr().round(2), cmap='coolwarm', annot=True, annot_kws={"size": 10})
plt.savefig('相关系数热力图.jpg')
plt.show() def VIF_calculate(data, y_name):
# import statsmodels.formula.api as smf
# import pandas as pd
x_cols = data.columns.to_list()
x_cols.remove(y_name) def vif(df_exog, exog_name):
exog_use = list(df_exog.columns)
exog_use.remove(exog_name)
model = smf.ols(f"{exog_name}~{'+'.join(list(exog_use))}", data=df_exog).fit()
return 1. / (1. - model.rsquared) df_vif = pd.DataFrame()
for x in x_cols:
df_vif.loc['VIF', x] = vif(data[x_cols], x) df_vif.loc['tolerance'] = 1 / df_vif.loc['VIF']
df_vif = df_vif.T.sort_values('VIF', ascending=False)
df_vif.loc['mean_vif'] = df_vif.mean()
# from statsmodels.formula.api import ols
def vif(data, col_i):
"""
df: 整份数据
col_i:被检测的列名
"""
cols = list(data.columns)
cols.remove(col_i)
cols_noti = cols
formula = col_i + '~' + '+'.join(cols_noti)
r2 = ols(formula, data).fit().rsquared
# 其实就是多元线性回归建模步骤,只是取出了参数 R 平方而已
test = 1. / (1. - r2)
return test print('vif检验结果')
print(' 变量 vif检验值')
vif_value = []
for i in data:
print(i.center(7) + ' ', str(vif(data=data, col_i=i)))
vif_value.append(vif(data=data, col_i=i))
plt.bar([x for x in data], vif_value, color='teal')
plt.axhline(10, color='red', lw=2, label="参考线")
plt.title("VIF检验结果")
plt.xlabel("变量")
plt.ylabel("VIF_value")
plt.show()
return print(df_vif) def Residuals_plot(predicts,residuals):
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False plt.subplots(2, 2, figsize=(8, 8), dpi=128)
plt.subplot(221)
plt.scatter(predicts, residuals)
plt.xlabel('Fitted Value')
plt.ylabel('Residual')
plt.title('(a)Residuals vs Fitted Plot', fontsize=15)
plt.axhline(0, ls='--') ax2 = plt.subplot(222)
pplot = sm.ProbPlot(residuals, fit=True)
pplot.qqplot(line='r', ax=ax2, xlabel='Theoretical Quantiles', ylabel='Sample Quantiles')
ax2.set_title('(b)Normal Q-Q Plot', fontsize=15) #创建一个序列来表示观测序号:
obs = np.arange(1, len(residuals) + 1)
#绘制scale-location图
ax3 = plt.subplot(223)
ax3.scatter(np.sqrt(obs), np.abs(residuals))
ax3.set_xlabel("√Observation Number")
ax3.set_ylabel("|Residuals|")
ax3.set_title("(c)Scale-Location Plot") #计算库克距离并绘制库克距离图:
model = sm.OLS(residuals, sm.add_constant(obs)).fit() # 应用OLS回归模型
influence = model.get_influence()
cooks_dist = influence.cooks_distance[0] ax4=plt.subplot(224)
ax4.scatter(obs, cooks_dist)
ax4.axhline(y=4*cooks_dist.mean(), linestyle='dashed')
ax4.set_xlabel("Observation")
ax4.set_ylabel("Cook's Distance")
ax4.set_title("(d)Cook's Distance Plot")
plt.tight_layout()
plt.show()
Multivariable_statistics.py
2>对上述代码进行简单调用:
import Multivariable_statistics as Ms
import numpy as np
import pandas as pd
p=np.linspace(20,60,100) #预测值
r=np.random.uniform(-1,1,100) #残差值
print(r)
Ms.Residuals_plot(residuals=r,predicts=p) #残差四图 #对于其他两个图的使用教程,以p,r数据为例
#得到一组100*2的数据
df=pd.DataFrame(p,columns=['p'])
df['r']=r
df['y']=np.linspace(50,80,100) #预测值
print(df) Ms.Corr_heatmap(df) #皮尔逊相关系数的热力图
Ms.VIF_calculate(df,'y') #VIF检验值以及图
3>结果图如下:
基于Python代码的相关性热力图,VIF共线性诊断图及残差四图的使用及解释的更多相关文章
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- python代码是解释型语言,为什么还有编译过程?
Python 代码在运行前,会先编译(翻译)成中间代码,每个 .py 文件将被换转成 .pyc 文件,.pyc 就是一种字节码文件,它是与平台无关的中间代码,不管你放在 Windows 还是 Linu ...
- 基于Python使用SVM识别简单的字符验证码的完整代码开源分享
关键字:Python,SVM,字符验证码,机器学习,验证码识别 1 概述 基于Python使用SVM识别简单的验证字符串的完整代码开源分享. 因为目前有了更厉害的新技术来解决这类问题了,但是本文作 ...
- Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...
- 基于Python接口自动化测试框架+数据与代码分离(进阶篇)附源码
引言 在上一篇<基于Python接口自动化测试框架(初级篇)附源码>讲过了接口自动化测试框架的搭建,最核心的模块功能就是测试数据库初始化,再来看看之前的框架结构: 可以看出testcase ...
- 基于深度学习的人脸性别识别系统(含UI界面,Python代码)
摘要:人脸性别识别是人脸识别领域的一个热门方向,本文详细介绍基于深度学习的人脸性别识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择人脸图片.视频进行检 ...
- 基于Python接口自动化测试持续集成----在jenkins创建任务->检出git的代码-->生成报告-->发送邮件
步骤一:先在jenkins创建一个自由风格的任务 步骤二:然后在源码管理选择git检出代码的方式,需要提供代码所在git的路径和登录git的账号和密码 步骤三:返回到任务配置的界面,先在构建后操作增加 ...
- 基于深度学习的鸟类检测识别系统(含UI界面,Python代码)
摘要:鸟类识别是深度学习和机器视觉领域的一个热门应用,本文详细介绍基于YOLOv5的鸟类检测识别系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中可以选择各种鸟类图 ...
- 在html中写python代码的语法和特点-----基于webpy的httpserver
在html文件里写python语法的内容,的注意事项: 1:python程序中的变量通过以下方法传入到html: 1:通过全局变量 :全局变量是不须要用$def with语法实现传递的,仅仅要定义了 ...
- 代码编辑器[0] -> Vim/gVim[0] -> 基于 Python 的 gVim 环境配置(Windows)
环境配置 / Environment Setup 基于Python开发的 gVim 环境配置(Windows) 使用方式参考 Vim 的使用. 1 基于vundle进行配置 Vim有多个扩展管理器, ...
随机推荐
- Spring异步任务async介绍与案例实战
关于spring异步任务 简单地说,用@Async注释bean的方法将使其在单独的线程中执行.换句话说,调用者不会等待被调用方法的完成.利用spring提供的注解即可简单轻松的实现异步任务处理. 默认 ...
- Redhat7更改网易yum源
说明 之前写了一篇关于Redhat6更换Yum源的文章,时隔已久很多包都变了,正好最近搭建环境需要用到Redhat7.3所以就再记录一下如何更换为国内最新最常用的yum源. 操作步骤 1.卸载系统自带 ...
- 使用yum 报错 :This system is not registered with RHN
解决办法:(假定你已安装yum,且网络畅通)更改yum的源, 即更换/etc/yum.repos.d/rhel-debuginfo.repo 这个文件.首先备份,如下所示: [root@localho ...
- Google C++ 风格指南记录
最近在看谷歌的 C++ 风格指南发现了一些有意思的知识点,遂记录下 1. 第六章第二小节介绍了右值引用 只在定义移动构造函数与移动赋值操作时使用右值引用. 不要使用 std::forward. 定义: ...
- jdk17新特性梳理
jdk17新特性梳理 目录 jdk17新特性梳理 jdk8升级至jdk17新特性梳理 升级jdk17的理由 新特性梳理 可以在接口中定义私有方法,主要为了jdk8的default方法 局部变量可以使用 ...
- SpringBoot与Thymeleaf入门级操作
使用Thymeleaf 三大理由: 简洁漂亮 容易理解 完美支持HTML5 使用浏览器直接打开页面 不新增标签 只需增强属性 学习目标 快速掌握Thymeleaf的基本使用:五大基础语法,常用内置对象 ...
- Java链接Mysql数据库整理,尽管很简单,但还是分享出来,希望对那些初级朋友有所帮助!!!
Java MySQL 连接 Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为: ...
- Redis哨兵(sentinel)
目录 前言 原理 架构图 下载 命令 配置 启动 查看 Sentinel(哨兵)配置 常用命令 Q&A Redis主从配置异常解决:Error condition on socket for ...
- 【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
问题描述 错误的操作步骤: 1)更新Service Fabric 的证书,制定了次要证书(Secondary),但是只修改了Service Fabric Cluster证书,而没有指定VMSS(虚拟机 ...
- 2024年,提升Windows开发和使用体验实践 - 终端&命令行篇
前言 经过前面的铺垫,终于继续更新了,这个大概率是本系列近期的最后一篇了. 同时之前有些内容更新,我也补充到这一篇里面. 关于 scoop 管理器的补充 scoop 常用命令 scoop help # ...