該賞金過期5天。這個問題的答案有資格獲得 50聲望獎勵。 oli5679想引起更多人對這個問題的關注。
我使用 tensorflow 決策森林創建了一個分類模型。我正在努力評估非默認指標(在本例中為 PR-AUC)的性能變化與樹數量的關系。
下面是我嘗試的一些代碼。
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
import pandas as pd
import tensorflow as tf
import tensorflow_decision_forests as tfdf
train = load_diabetes()
X = pd.DataFrame(train['data'])
X['target'] = (pd.Series(train['target']) > 100).astype(int)
X_train, X_test = train_test_split(X)
train_ds = tfdf.keras.pd_dataframe_to_tf_dataset(X_train, label="target")
test_ds = tfdf.keras.pd_dataframe_to_tf_dataset(X_test, label="target")
pr_auc = tf.keras.metrics.AUC( curve='PR',)
tfdf_clf = tfdf.keras.GradientBoostedTreesModel()
tfdf_clf.compile(metrics=[pr_auc])
tfdf_clf.fit(train_ds, validation_data=test_ds,)
現在我得到了非常有用的訓練日志
tfdf_clf.make_inspector().training_logs()
#[TrainLog(num_trees=1, evaluation=Evaluation(num_examples=None, accuracy=0.9005518555641174, loss=0.6005926132202148, rmse=None, ndcg=None, aucs=None)),
#TrainLog(num_trees=2, evaluation=Evaluation(num_examples=None, accuracy=0.9005518555641174, loss=0.5672071576118469, rmse=None, ndcg=None, aucs=None)),
但它不包含任何關于 PR-AUC 與迭代的資訊
如果我評估模型,它只會在訓練結束時保持 PR-AUC,盡管它會記錄一些中間資訊。
tfdf_clf.evaluate(test_ds)
1180/1180 [==============================] - 10s 8ms/步 - 損失:0.0000e 00 - auc: 0.6832
如何找到測驗資料 PR-AUC 與樹數量的關系?我需要專門使用tensforflow決策森林庫。
uj5u.com熱心網友回復:
繪制 AUPRC。內插精度-召回曲線下的面積,通過為分類閾值的不同值繪制(召回、精度)點獲得。取決于它的計算方式,PR AUC 可能相當于模型的平均精度。看起來精度比較高,但召回率和 ROC 曲線下面積 (AUC) 沒有你想象的那么高. 分類器在嘗試最大化精度和召回率時經常面臨挑戰,尤其是在處理不平衡資料集時。在您關心的問題的背景關系中考慮不同型別錯誤的成本非常重要。在這個例子中,假陰性(欺詐交易被遺漏)可能會產生財務成本,
一般來說,你使用的樹越多,得到的結果就越好。然而,隨著樹數量的增加,改進會減少,即在某個點,學習更多樹的預測性能的好處將低于學習這些額外樹的計算時間的成本。隨機森林是集成方法,您可以對許多樹進行平均。類似地,如果您想估計一個實值隨機變數的平均值(例如您所在國家/地區公民的平均身高),您可以取樣。預期方差將隨著樣本大小的平方根而減小,并且在某一點上,收集更大樣本的成本將高于從此類更大樣本獲得的準確度收益。在您的情況下,您觀察到在單個測驗集的單個實驗中,10 棵樹的森林比 500 棵樹的森林表現更好。這可能是由于統計差異造成的。如果這會系統地發生,我會假設實施存在問題。樹的數量的典型值是 10、30 或 100。我認為在極少數實際情況下,超過 300 棵樹的權重超過了學習它們的成本(好吧,除非你有一個非常大的資料集)。
uj5u.com熱心網友回復:
梯度提升樹不支持 PR-AUC 指標。但是,所有指標都可用于隨機森林。您需要將訓練資料轉換為與測驗資料具有相同結構的格式,通過在 train_ds 上訓練的梯度提升樹模型運行它,并通過 train_ds.eval() 使用 test_ds 進行評估。
Gradient Boosted Trees 沒有 PR-AUC 指標的原因是它們的訓練方式與隨機森林不同。它們不是回歸量,因此回傳為正的概率估計是沒有意義的。相反,它們僅回傳每個測驗示例的所有樹的平均類別標簽預測,以及標簽排名。這些排名用于通過 AggregatedMetrics API 計算聚合指標。請注意,它在訓練期間對所有樹的所有預測進行平均,因此沒有引數來控制用于評估目的的樣本數量。
評估這些型別模型的更好方法不是使用 PR-AUC 等人工指標,而是使用 Tensorflow 中內置的自動指標。這是因為它們考慮了模型大小(較小的模型有時可能具有統計意義,但由于其較小的大小而最終過度擬合),并且還允許您選擇在評估中使用的樣本數量(這可能與訓練不同放)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337548.html
上一篇:有沒有辦法在javascript中使用keras.pad_sequences?
下一篇:面向物件和封裝學習總結
