如何处理scikit-learn中GradientBoostingClassifier大量缺失值的问题

所有特征都是浮点数据类型,但其中一些特征包含大量的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’)来说过大的值。

我无法使用一些填补方法用均值、中位数或最常见的值来填补NaN,因为从数据的角度来看这没有任何意义。有没有更好的方法让分类器识别NaN并将其视为一个指示性特征?非常感谢。


回答:

你需要进行数据清理。为此,你需要查看要包含在训练数据集中的。对于浮点数,你可以将所有空值替换为零

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

而对于字符串,你可以用默认值替换它。

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

现在,如果你想使用平均值或某些趋势值,你可以使用相同的学习算法来预测缺失值并填补。对于运行算法,首先替换空值,然后可以用更准确的预测值进行修改。

注意:任何学习算法都无法处理空值。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注