簡體   English   中英

Scikit-learn:使用均值(而不是中位數)的 MAE 標准

[英]Scikit-learn: MAE criterion using mean (rather than median)

Scikit-learn 的決策樹和隨機森林的absolute_error標准(即 MAE 標准 class: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/tree/_criterion.pyx )的尺度比較差到默認的squared_error標准。

請參閱此處的討論: https://github.com/scikit-learn/scikit-learn/issues/9626

我正在處理一個太大而無法合理使用 MAE 的數據集,但是,我想對 MAE 進行一些實驗,或者如果可能的話至少對其進行近似。 閱讀 MAE 的工作原理,我了解到它基於使用單個葉子的中位數而不是均值,這就是導致它與 MSE 相比擴展性較差的原因。

基於對決策樹訓練過程如何工作的非常膚淺的理解,我假設我可以修改 MSE 標准 class 以獲得 MAE 的近似值。 具體來說,如果 MSE 使用平方誤差,我會認為在那里的某個地方,我可以將平方根應用於現有計算以獲得絕對誤差。

例如,MSE class 中的類似以下內容(請參閱第一個鏈接):

for k in range(self.n_outputs):
    impurity_left[0] -= (self.sum_left[k] / self.weighted_n_left) ** 2.0
    impurity_right[0] -= (self.sum_right[k] / self.weighted_n_right) ** 2.0

可能會變成:

for k in range(self.n_outputs):
    impurity_left[0] -= ((self.sum_left[k] / self.weighted_n_left) ** 2.0)**0.5
    impurity_right[0] -= ((self.sum_right[k] / self.weighted_n_right) ** 2.0)**0.5 

然而,我所有的實驗都導致單個樹估計器不適合超過一片葉子,因此預測所有樣本的相同值。

我只是想知道這種方法是否真的有意義,如果是的話,我需要修改什么才能使其發揮作用。

我認為這里有些混亂。 首先,關於 MAE 與 MSE 的縮放,MSE 可以縮放 $O(n)$,而根據您鏈接的 Github 問題,scikit-learn 中的 MAE 縮放 $O(n^2)$,但可以實施 MAE 以縮放 $ O(n*log(n))$(有關詳細信息,請參閱有關未通過您提供的鏈接中的單元測試的 PR 的討論)。 所以如果你想要一個高效的 MAE,你可以自己實現一個並獲得更快的運行時間。

關於您修改均方誤差的嘗試/問題,我認為您有點被誤導了。 誤差被平方以說明計算出的差異可能是正數或負數這一事實,並且當您偏離 0 並且 $x$ 和 $-x$ 的偏差相等時,誤差應該是單調增加的。 因此,不幸的是,您不能只是“求平方根”——它不會起作用,而且可能會產生不直觀的結果。

作為旁注,希望您會發現這個有價值的東西(來自您問題中的鏈接問題):

PSA,鼓勵用戶使用帶有 loss='least_absolute_deviation' 的 HistGradientBoostingRegressor,這樣會快得多

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM