【深度学习|地学应用】基于python的共线性检验:计算各个因子的方差膨胀因子(Variance Inflation Factor,VIF)以及容差(Tolerance,TOL)列出表格并导出。

【深度学习|地学应用】基于python的共线性检验:计算各个因子的方差膨胀因子(Variance Inflation Factor,VIF)以及容差(Tolerance,TOL)列出表格并导出。

【深度学习|地学应用】基于python的共线性检验:计算各个因子的方差膨胀因子(Variance Inflation Factor,VIF)以及容差(Tolerance,TOL)列出表格并导出。



欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/147526690


前言

下面的 Python 示例演示如何:

  1. 读取多波段影像(multiband.tif)和二值标签(label.tif),
  2. 将它们拼合到同一个 DataFrame 中,每一列为一个因子(各波段和标签),每一行对应一个像素,
  3. 计算每个因子的方差膨胀因子(VIF)与容差(Tolerance),
  4. 将结果保存为 CSV 表格。

代码示例

import os
import numpy as np
import pandas as pd
import rasterio
from statsmodels.stats.outliers_influence import variance_inflation_factor

# 输入路径
multiband_path = 'multiband.tif'
label_path     = 'label.tif'
out_csv        = 'vif_tolerance.csv'

# 1. 读取多波段影像
with rasterio.open(multiband_path) as src:
    data = src.read().astype(np.float32)  # shape = (bands, h, w)
    bands, h, w = data.shape
    band_names = [f'B{i}' for i in range(1, bands+1)]

# 2. 读取标签
with rasterio.open(label_path) as src:
    label = src.read(1).astype(np.int32)  # 二值标签

# 3. 构建 DataFrame:每个像素为一行,各波段 + label 为列
#    首先将多波段和标签都拉平
flat_dict = {name: data[i].ravel() for i, name in enumerate(band_names)}
flat_dict['label'] = label.ravel()
df = pd.DataFrame(flat_dict)

# (可选)如果想只对标签为1的像素计算,则:
# df = df[df['label'] == 1].reset_index(drop=True)

# 4. 计算 VIF 与容差
#    容差 TOL = 1 / VIF
vif_data = []
X = df.values
cols = df.columns
for i, col in enumerate(cols):
    vif = variance_inflation_factor(X, i)
    tol = 1.0 / vif if vif != 0 else np.nan
    vif_data.append({'factor': col, 'VIF': vif, 'Tolerance': tol})

vif_df = pd.DataFrame(vif_data)

# 5. 导出到 CSV
vif_df.to_csv(out_csv, index=False, float_format='%.4f')
print(f'VIF and Tolerance saved to {out_csv}')

代码说明

  1. 数据展平:将栅格的所有像素展平后拼接成 DataFrame,以便做多元线性回归的 VIF 计算。
  2. 方差膨胀因子(VIF):衡量某个自变量与其他自变量的共线性程度,VIF 越高,表明与其他因子的多重共线性越严重。
  3. 容差(Tolerance):等于 1/VIF,代表某自变量与其他变量可解释的独立性,容差越小,共线性问题越严重。
  4. 标签过滤:如只关注滑坡区域,可在第三步将 DataFrame 过滤为 label == 1 的像素后再计算。

运行该脚本后,vif_tolerance.csv 中将包含如下结构的表格:

factorVIFTolerance
B112.34560.0810
B28.90120.1124
label5.43210.1841
  • 即可用于后续的多重共线性诊断与因子筛选。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

985小水博一枚呀

祝各位老板前程似锦!财源滚滚!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值