【深度学习|地学应用】基于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 示例演示如何:
- 读取多波段影像(
multiband.tif
)和二值标签(label.tif
), - 将它们拼合到同一个 DataFrame 中,每一列为一个因子(各波段和标签),每一行对应一个像素,
- 计算每个因子的方差膨胀因子(VIF)与容差(Tolerance),
- 将结果保存为 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}')
代码说明
- 数据展平:将栅格的所有像素展平后拼接成 DataFrame,以便做多元线性回归的 VIF 计算。
- 方差膨胀因子(VIF):衡量某个自变量与其他自变量的共线性程度,VIF 越高,表明与其他因子的多重共线性越严重。
- 容差(Tolerance):等于
1/VIF
,代表某自变量与其他变量可解释的独立性,容差越小,共线性问题越严重。 - 标签过滤:如只关注滑坡区域,可在第三步将 DataFrame 过滤为
label == 1
的像素后再计算。
运行该脚本后,vif_tolerance.csv
中将包含如下结构的表格:
factor | VIF | Tolerance |
---|---|---|
B1 | 12.3456 | 0.0810 |
B2 | 8.9012 | 0.1124 |
… | … | … |
label | 5.4321 | 0.1841 |
- 即可用于后续的多重共线性诊断与因子筛选。