首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sklearn.ensemble.RandomForestClassifier的输出包括NaN值

sklearn.ensemble.RandomForestClassifier的输出包括NaN值
EN

Stack Overflow用户
提问于 2016-09-13 14:03:18
回答 1查看 900关注 0票数 1

我正在使用sklearn.ensemble.RandomForestClassifier来分析数据,并且我很困惑地看到NaN值在预测中没有任何NaN在训练集中或在测试集中。

代码语言:javascript
运行
复制
print preds_y[preds_y.isnull().any(axis=1)].shape
print train_y[train_y.isnull().any(axis=1)].shape
print train_features[train_features.isnull().any(axis=1)].shape
print test_features[train_features.isnull().any(axis=1)].shape

> (4830, 1)
> (0, 1)
> (0, 22)
> (0, 22)

这些NaN值导致对报告的调用失败,并出现以下错误:

代码语言:javascript
运行
复制
> ValueError: Mix of label input types (string and number)

现在,我最感兴趣的是,为什么随机森林会吐鼻涕。一旦我知道了这一点,我就可以相应地过滤结果,并查看该方法的执行情况。

提前感谢您的投入。

)如果以前有人问过这个问题,我很抱歉。我搜索了它,但我在培训数据中发现的所有结果都与NaNs有关,这根本不是我的问题。)

编辑1:为了清楚起见,输出中有许多有效的预测:

代码语言:javascript
运行
复制
print preds_y[~preds_y.isnull().any(axis=1)].shape
print train_y[~train_y.isnull().any(axis=1)].shape

> (11760, 1)
> (39749, 1)

编辑2:

正如我在下面的评论中所写的,原始数据有数字列和分类列。在调用fit()之前,使用pandas.get_dummies()将所有分类列转换为数字。我将结果转换回pandas.DataFrame,并为可读性重建原始分类列。两个pandas.Series --预测值和实际值--我给classification_report()添加的只有一种类型(类别)。

如果随机林对对应于原始分类列的每个虚拟二进制列预测为0,那么预测中的NaNs就会出现。我没有料到这种情况会如此频繁--我的参赛作品中有30%似乎没有被分类--但我不确定在这个问题上还有什么要补充的。

EN

回答 1

Stack Overflow用户

发布于 2018-08-18 10:15:11

首先,可以通过将所有NaN替换为零来删除它们。见此链接

也许使用df.fillna(0),那么我想你应该会没事的。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39472040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档