繁体   English   中英

sklearn:在 MaskedArray 上预测的分类器

[英]sklearn: Classifier to predict on a MaskedArray

我试图弄清楚如何处理 numpy 掩码数组(而不是常规 numpy 数组)上的分类器预测。 这是我的代码:

# My masked array on which to perform the prediction
>>> type(patch)
    numpy.ma.core.MaskedArray
>>> patch.shape
    (3,3,14)
# This is how it looks like the first layer in the 3rd dimension. 
>>> patch[:,:,0]
    masked_array(
  data=[[90, 28, 16],
        [79, 32, --],
        [41, --, --]],
  mask=[[False, False, False],
    [False, False,  True],
    [False,  True,  True]],
 fill_value=999999,
 dtype=uint16)

在上面的代码中,您可以看到第三维的第一层。 patch.shape可以看到有 14 层。 他们每个人都有位置:(1,2),(2,1)和(2,2)蒙面!

现在,我使用预训练的 RandomForest 分类器cl对 id 为 1、4、6 的补丁的值进行分类。 我希望分类器忽略分类过程的掩码值,但在这样做之后:

>>> class_pred = cl.predict(patch.reshape(-1, patch.shape[2]))
>>> class_pred = class_pred.reshape(patch[:,:,0].shape)

我得到:

>>> class_pred 
    array([[4, 4, 4],
           [4, 4, 1],
           [4, 1, 1]])

因此 (1,2)、(2,1) 和 (2,2) 处的位置不再被屏蔽,但它们也被分类了。

有没有办法强制分类器在分类过程中忽略屏蔽值? 为了获得这样的东西:

masked_array(
  data=[[4, 4, 4],
        [4, 4, --],
        [4, --, --]],
  mask=[[False, False, False],
    [False, False,  True],
    [False,  True,  True]],
 fill_value=999999,
 dtype=uint16)

我认为现在的答案是:Scikit Learn 会忽略传递数据的掩码。 无论该掩码数组的基础值在掩码数据中如何,分类器都将使用它来fitpredict ,因此您将获得 class 值。

对于您的具体情况:输入具有矩阵结构有多重要? 如果这些输入总是被屏蔽(例如,因为它们是三角形数组),您可能希望将它们分解为向量。 即使对于像图像这样的全方阵,人们也会这样做(例如考虑一个 ConvNet)。

在更广泛的意义上,如果你所做的是代表缺失值,那么我必须说,这种 ML 仍处于胚胎阶段(但正在加速推进)。 我可以向您推荐《缺少数据的统计分析》一书,其中包含不少算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM