簡體   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