【问题标题】:How to handle lots of missing values in GradientBoostingClassifier in sklearn如何在 sklearn 的 GradientBoostingClassifier 中处理大量缺失值
【发布时间】:2018-05-09 03:07:41
【问题描述】:

所有特征都是浮点数据类型,而有些特征的 NaN 占主导地位。我尝试通过GradientBoostingClassifier 训练模型,如下所示。

train_x, test_x, train_y, test_y = train_test_split(features[feature_headers], features[target_header], test_size=0.33, random_state=int(time.time()))
clf = GradientBoostingClassifier(random_state=int(time.time()), learning_rate=0.1, max_leaf_nodes=None, min_samples_leaf=1, n_estimators=300, min_samples_split=2, max_features=None)
clf.fit(train_x, train_y)

但是会报错:

ValueError:输入包含 NaN、无穷大或对于 dtype('float32') 来说太大的值。

我不能使用一些 Imputation 方法来用均值、中值或 most_frequent 填充 NaN,因为从数据的角度来看它没有任何意义。有没有更好的方法让分类器识别 NaN 并将其也视为指示性特征?非常感谢。

【问题讨论】:

  • 为什么不能用零替换 NaN?鉴于大多数情况下人们会估算缺失的 NaN 值,您的答案非常具体。
  • 所有列都是浮点格式,它们的范围可能是[negative_value,positive_value],所以这意味着实际值可能是0,所以如果我用0填充NaN,会不会是个问题?谢谢! @jonnybazookatone
  • 正如@Harry_pb 所说,应该没问题,特别是对于 GBC。

标签: python machine-learning scikit-learn classification


【解决方案1】:

您必须执行数据清理。为此,您需要查看要将哪些columns 包含在训练数据集中。对于浮点数,您可以将所有 null 值替换为零

df.col1 = df.col1.fillna(0)

对于字符串,您可以将其替换为默认值。

df.col2 = df.DISTANCE_GROUP.fillna('')

现在,如果您想放置average 或某个趋势值,您可以使用相同的学习算法来预测缺失值并进行填充。为了运行算法,首先替换空值,然后可以用更准确的预测值进行更改。

注意:任何学习算法都不能使用空值运行。

【讨论】:

  • 所有列都是浮点格式,它们的范围可能是[negative_value,positive_value],所以这意味着实际值可能是0,所以如果我用0填充NaN,会不会是个问题?谢谢!
  • @JasonZhu 我个人使用0,正如我在回答中提到的那样,我们以后可以使用学习算法预测相同的值,但是要运行算法,我们需要替换空值。我更喜欢 0,因为它不会对学习值的方向产生太大影响。
  • 我明白了。谢谢!顺便说一句,我有一个值为 ('A', 'B', None) 的分类列,我已将其编码为 (1, 2, 0)。我应该这样做还是将其保留为字符串格式以便 GradientBoostingClassifier 在模型上进行训练?哪个更好?
  • 您的编码或 OneHotEncoding。
  • 好的,谢谢两位! @jonnybazookatone 和 Harry_pb
【解决方案2】:

xgboost.XGBClassifier 处理 np.nan 无插补see here

xgboost 有一个易于使用的sklearn api look at the documentation

xgboost.XGBClassifier 本质上与GradientBoostingClassifier 非常接近,两者都是用于分类的梯度提升方法。参见here

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 2018-11-24
    • 2017-12-11
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    • 2016-07-04
    相关资源
    最近更新 更多