【发布时间】:2015-07-30 18:41:55
【问题描述】:
我想知道在 scikit-learn 中是否有处理 nan/null 值的分类器。我认为随机森林回归器可以处理这个问题,但是当我调用 predict 时出现错误。
X_train = np.array([[1, np.nan, 3],[np.nan, 5, 6]])
y_train = np.array([1, 2])
clf = RandomForestRegressor(X_train, y_train)
X_test = np.array([7, 8, np.nan])
y_pred = clf.predict(X_test) # Fails!
我不能用任何缺少值的 scikit-learn 算法调用 predict 吗?
编辑。 现在想来,这也是有道理的。在训练期间这不是问题,但是当您预测变量为空时如何分支时?也许您可以将两种方式分开并平均结果?只要距离函数忽略空值,k-NN 似乎应该可以正常工作。
编辑 2(年长且聪明的我) 一些 gbm 库(例如 xgboost)正是为此目的使用三叉树而不是二叉树:2 个孩子用于是/否决策,1 个孩子用于缺失决策。 sklearn 是using a binary tree
【问题讨论】:
-
我也遇到了这个问题,我想你需要删除
nan值和this class 也源this 但我仍然无法解决这个问题。可能this 会有所帮助。 -
这里的问题是
NaN应该如何在这里表示?这是一个常见问题,您需要决定如何处理它们,您可以删除它们或用平均值或其他指示值替换它们 -
听说有些随机森林模型会忽略具有nan值的特征,使用随机选择的替代特征。不过,这似乎不是 scikit learn 中的默认行为。有没有人建议如何实现这种行为?它很有吸引力,因为您不需要提供估算值。
-
@Chogg - 看起来像“统计学习的要素”第 311 页建议(使用“代理变量”)作为添加缺失类别或估算值的替代方法,但我不知道有任何库不过这样做...
-
@anthonybell - 是的,同一本书也把我带到了这里。没有实现这种方法的库是否暗示使用代理变量不是一种有效的方法?
标签: python pandas machine-learning scikit-learn nan