vif-方差膨胀因子盘算

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

vif-方差膨胀因子



  • 使用statsmodels中的variance_inflation_factor,数据集使用乳腺癌数据集
    1. import pandas as pd
    2. import numpy as np
    3. from sklearn.datasets import load_breast_cancer
    4. from tqdm import notebook
    5. from statsmodels.stats.outliers_influence import variance_inflation_factor
    6. from statsmodels.tools import add_constant
    7. cancer = load_breast_cancer()
    8. df = pd.DataFrame(cancer.data,columns=['_'.join(i.split()) for i in cancer.feature_names])
    9. df['y'] = cancer.target
    10. def calc_vif(df,desc_dict=None):
    11.     """
    12.     df: DataFrame
    13.     desc_dict: 字段中文释义字典
    14.    
    15.     return: vif DataFrame
    16.     """
    17.     X=add_constant(df)
    18.     vif_list = []
    19.     for i in notebook.tqdm(range(X.shape[1])):
    20.         vif = variance_inflation_factor(X.values,i)
    21.         vif_list.append(vif)
    22.     s = pd.DataFrame(vif_list,index=X.columns)
    23.     s = s.reset_index()
    24.     s.columns = ['feature','vif']
    25.     if desc_dict:
    26.         s['中文释义'] = s.feature.map(desc_dict)
    27.         s = s[['feature','中文释义','vif']]
    28.     return s
    29.   
    30. str_list = df.select_dtypes(include='object').columns.tolist() # string类型
    31. flo_list = df.select_dtypes(exclude='object').columns.tolist() # 连续型
    32. # vif 不能计算string类型
    33. df_vif = df[flo_list]
    34. # vif 计算不能有空值
    35. for i in notebook.tqdm(flo_list):
    36.     df_vif[i] = df_vif[i].fillna(0)
    37. vif_data = calc_vif(df_vif)
    38. vif_data
    复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表