sklearn中GradientBoostingClassifier bug:ValueError: Input contains NaN, infinity or a value too large

18 篇文章 1 订阅
6 篇文章 0 订阅

宣称支持缺失值处理

sklearn的文档宣称支持处理缺失值,文档原文如下(为了防止文档发生变化,特意截图如下):

Note Scikit-learn 0.21 introduces two new implementations of gradient boosting trees, namely HistGradientBoostingClassifier and HistGradientBoostingRegressor, inspired by LightGBM (See [LightGBM]).
These histogram-based estimators can be orders of magnitude faster than GradientBoostingClassifier and GradientBoostingRegressor when the number of samples is larger than tens of thousands of samples.
They also have built-in support for missing values, which avoids the need for an imputer.
These estimators are described in more detail below in Histogram-Based Gradient Boosting.
The following guide focuses on GradientBoostingClassifier and GradientBoostingRegressor, which might be preferred for small sample sizes since binning may lead to split points that are too approximate in this setting.
请添加图片描述

实际却不支持缺失值处理

import numpy as np
from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
X, y = make_hastie_10_2(random_state=0)
X_train, X_test = X[:2000], X[2000:]
y_train, y_test = y[:2000], y[2000:]
X_train[0,0]=np.nan
clf = GradientBoostingClassifier()
clf.fit(X_train, y_train)

报错:

ValueError: Input contains NaN, 
infinity or a value too large for dtype('float32').

我使用的sklearn版本是1.0.2,版本是符合文档要求的。

可见sklearn还是有bug的,大家用的时候小心点!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,报错"ValueError: Input contains NaN, infinity or a value too large for dtype('float64')"表示输入的数据包含NaN值、无穷大的数据或者超出了float64类型的范围。解决这个问题的方法有两种:补齐或删除包含NaN值的列,或者减小样本数据。 为了解决这个问题,你可以使用pandas的describe()和head()方法来查看数据集的情况,前者可以提供整个数据集的概览,后者可以打印出前几行数据。你可以使用以下代码来实现: ```python print(data1.describe()) # 数据集概览 print(data1.head(5)) # 前5行 ``` 另外,根据引用\[3\]的内容,你还可以检测数据是否包含无穷数据,并进行相应的数据处理。你可以使用以下代码来检查是否包含无穷数据: ```python import numpy as np # 检查是否包含无穷数据 # False: 包含 # True: 不包含 print(np.isfinite(train).all()) # False: 不包含 # True: 包含 print(np.isinf(train).all()) ``` 如果数据包含无穷数据,你可以将其替换为0,使用以下代码实现: ```python train_inf = np.isinf(train) train\[train_inf\] = 0 ``` 希望以上方法能够帮助你解决报错"ValueError: Input contains NaN"的问题。 #### 引用[.reference_title] - *1* *3* [ValueError: Input contains NaN, infinity or a value too large for dtype(‘float64‘).](https://blog.csdn.net/lzx_850404536/article/details/117472650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [如何解决报错ValueError: Input contains NaN, infinity or a value too large for dtype('float64')的问题](https://blog.csdn.net/weixin_41013322/article/details/102509753)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千行百行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值