首页 > 解决方案 > 方差阈值显示 RuntimeWarning:切片的自由度 <= 0

问题描述

我有一个特征数据框,我想删除低方差特征。我使用以下函数过滤掉低方差列:

def variance_threshold_selector(data, threshold):

    selector = VarianceThreshold(threshold)
    selector.fit(data)

return data[data.columns[selector.get_support(indices=True)]]

对于不同的阈值,我收到以下警告:

/anaconda3/envs/Observation/lib/python3.7/site-packages/sklearn/feature_selection/_variance_threshold.py:77: RuntimeWarning: Degrees of freedom <= 0 for slice.
  self.variances_ = np.nanvar(X, axis=0)

/anaconda3/envs/Observation/lib/python3.7/site-packages/sklearn/feature_selection/_variance_threshold.py:88: RuntimeWarning: invalid value encountered in less_equal
  (self.variances_ <= self.threshold)):

/anaconda3/envs/Observation/lib/python3.7/site-packages/sklearn/feature_selection/_variance_threshold.py:99: RuntimeWarning: invalid value encountered in greater

这些警告是什么,我该如何解决?

标签: pythonscikit-learnvariance

解决方案


在这篇文章之后

RuntimeWarning:切片的自由度 <= 0

当您使用错误的形状时发生

在这篇文章之后

RuntimeWarning:在less_equal中遇到无效值

由于所涉及的输入中某处的 np.nan ,很可能会发生这种情况

并关注这篇文章

RuntimeWarning:在更大的范围内遇到无效值

您的问题是由 out_vec 数组中的 NaN 或 Inf 元素引起的


推荐阅读