繁体   English   中英

VIF 函数返回所有“inf”值

[英]VIF function returns all 'inf' values

我正在处理带有variance_inflation_factor()函数的多重共线性问题。

但是在运行该函数后,我发现该函数将所有分数作为无限值返回。

这是我的代码:

from rdkit import Chem
import pandas as pd
import numpy as np
from numpy import array

data = pd.read_csv('Descriptors_raw.csv')
class_ = pd.read_csv('class_file.csv')
class_tot = pd.read_csv('class_total.csv')

mols_A1 = Chem.SDMolSupplier('finaldata_A1.sdf')
mols_A2 = Chem.SDMolSupplier('finaldata_A2.sdf')
mols_B = Chem.SDMolSupplier('finaldata_B.sdf')
mols_C = Chem.SDMolSupplier('finaldata_C.sdf')

mols = []
mols.extend(mols_A1)
mols.extend(mols_A2)
mols.extend(mols_B)
mols.extend(mols_C)

mols_df = pd.DataFrame(mols)
mols = pd.concat([mols_df, class_tot, data], axis=1)

mols = mols.dropna(axis=0, thresh=1400)
mols.groupby('target_name_quarter').mean()
fill_mean_func = lambda g: g.fillna(g.mean())
mols = mols.groupby('target_name_quarter').apply(fill_mean_func)
molfiles = mols.loc[:, :'target_quarter']
descriptors = mols.loc[:, 'nAcid':'Zagreb']

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
fitted = scaler.fit(descriptors)
descriptors_scaled = scaler.transform(descriptors)
descriptors_scaled = pd.DataFrame(descriptors_scaled, columns=descriptors.columns, index = list(descriptors.index.values))

from sklearn.feature_selection import VarianceThreshold

def variance_threshold_selector(data, threshold):
    selector = VarianceThreshold(threshold)
    selector.fit(data)
    return data[data.columns[selector.get_support(indices=True)]]

descriptors_del_lowvar = variance_threshold_selector(descriptors_scaled, 0.01)
mols = pd.concat([molfiles, descriptors_del_lowvar.loc[:, 'nAcid':'Zagreb']], axis=1)

mols.loc[:, 'nAcid':'Zagreb'].corr()

import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor
% matplotlib inline
sns.pairplot(mols[['apol', 'nAtom', 'nHeavyAtom', 'nH', 'nAcid']])

vif = pd.DataFrame()
des = mols.loc[:, 'nAcid':'Zagreb'] 
vif["VIF factor"] = [variance_inflation_factor(des.values, i) for i in range(des.shape[1])]
vif["features"] = des.columns
print(vif)

我在消除低方差特征时使用了MinMaxScaler()以使所有变量在同一范围内。 print(vif)返回一个包含所有无限值的数据帧,我不知道为什么。

先感谢您 :)

这显示了两个自变量之间的完美相关性。 在完全相关的情况下,我们得到 R2 =1,这导致 1/(1-R2) 无穷大。 为了解决这个问题,我们需要从数据集中删除一个导致这种完美多重共线性的变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM