幾種MAPE的實現方式

2021-10-04 18:48:30 字數 1263 閱讀 7073

這種方式是為了防止label裡面有nan值,但沒考慮是否為零值。這裡以pytorch進行舉例。

def

masked_mape

(preds, labels, null_val=np.nan)

:if np.isnan(null_val)

: mask =

~torch.isnan(labels)

else

: mask =

(labels!=null_val)

mask = mask.

float()

mask /= torch.mean(

(mask)

) mask = torch.where(torch.isnan(mask)

, torch.zeros_like(mask)

, mask)

loss = torch.

abs(

(preds-labels)

/labels)

loss = loss * mask

loss = torch.where(torch.isnan(loss)

, torch.zeros_like(loss)

, loss)

return torch.mean(loss)

這種方式考慮了分母是否為零值,預設label不為nan(提前保證,或者使用sklearn.utils.validation裡面的cheak_array()函式來檢查)。

def

mape_loss_func

(preds,labels)

: mask=labels!=

0return np.fabs(

(labels[mask]

-preds[mask]

)/labels[mask]

).mean(

)

這種方式是推薦的,因為分母太小,會導致mape太大,所以,把它限定住,非常合適。如果需要,也可以對**值進行一定的限制。

(下面的方法以label和**值都在0-1之間進行舉例)

def

mape_loss_func2

(preds,labels)

:return np.fabs(

(label-pred)

/np.clip(label,

0.1,1)

).mean(

)

居中的幾種實現方式

如果需要居中的是內聯元素的話,給父級元素加上text align center即可。如果是塊級元素,那就給自身加上margin 0 auto,上下的margin為0,左右auto就會自動居中。如果多個塊級元素放到一行並居中,你可以使用display inling block把他們變成內聯元素,然後再...

spring aop 的幾種實現方式

博主只用過或者了解過三種用法 1.其於 實現 2.原生的切面 3.aspectj註解驅動的切面 個人感覺第一種用起來比較簡單。也比較好理解,主要有以下的配置檔案 這樣就可以簡單的完成乙個aop 的實現 了 第二種 是基於在原始的標籤在配置的aop 就是注入到spring容器中了 網上的另一中寫法 a...

實現繼承的幾種方式

要搞懂js繼承,我們首先要理解原型鏈 每乙個例項物件都有乙個 proto 屬性 隱式原型 在js內部用來查詢原型鏈 每乙個建構函式都有prototype屬性 顯式原型 用來顯示修改物件的原型,例項.proto 建構函式.prototype 原型。原型鏈的特點就是 通過例項.proto 查詢原型上的屬...