vif-方差膨胀因子计算

vif-方差膨胀因子

  • 使用statsmodels中的variance_inflation_factor,数据集使用乳腺癌数据集

    import pandas as pd
    import numpy as np
    from sklearn.datasets import load_breast_cancer
    from tqdm import notebook
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    from statsmodels.tools import add_constant
    
    cancer = load_breast_cancer()
    df = pd.DataFrame(cancer.data,columns=['_'.join(i.split()) for i in cancer.feature_names])
    df['y'] = cancer.target
    
    def calc_vif(df,desc_dict=None):
        """
        df: DataFrame
        desc_dict: 字段中文释义字典
        
        return: vif DataFrame
        """
        X=add_constant(df)
        vif_list = []
        for i in notebook.tqdm(range(X.shape[1])):
            vif = variance_inflation_factor(X.values,i)
            vif_list.append(vif)
        s = pd.DataFrame(vif_list,index=X.columns)
        s = s.reset_index()
        s.columns = ['feature','vif']
        if desc_dict:
            s['中文释义'] = s.feature.map(desc_dict)
            s = s[['feature','中文释义','vif']]
        return s
      
    str_list = df.select_dtypes(include='object').columns.tolist() # string类型
    flo_list = df.select_dtypes(exclude='object').columns.tolist() # 连续型
    
    # vif 不能计算string类型
    df_vif = df[flo_list]
    
    # vif 计算不能有空值
    for i in notebook.tqdm(flo_list):
        df_vif[i] = df_vif[i].fillna(0)
    
    vif_data = calc_vif(df_vif)
    vif_data
    

    20230104I7cHIZ


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值