1
我從sklearn的RandomForestClassifier和roc_curve,AUC方法分別接收不同的ROC-AUC得分,AUC方法。差異ROC-AUC分數sklearn RandomForestClassifier與
下面的代碼讓我的0.878的ROC-AUC(即gs.best_score_):
def train_model(mod = None, params = None, features = None,
outcome = ...outcomes array..., metric = 'roc_auc'):
gs = GridSearchCV(mod, params, scoring=metric, loss_func=None, score_func=None,
fit_params=None, n_jobs=-1, iid=True, refit=True, cv=10, verbose=0,
pre_dispatch='2*n_jobs', error_score='raise')
gs.fit(...feature set df..., outcome)
print gs.best_score_
print gs.best_params_
return gs
model = RandomForestClassifier(random_state=2000, n_jobs=-1)
features_to_include = [...list of column names...]
parameters = {
'n_estimators': [...list...], 'max_depth':[...list...],
'min_samples_split':[...list...], 'min_samples_leaf':[...list...]
}
gs = train_model(mod = model, params = parameters, features = features_to_include)
然而,下面的代碼讓我0.97的ROC-AUC:
fpr = dict()
tpr = dict()
roc_auc = dict()
fpr['micro'], tpr['micro'], _ = roc_curve(...outcomes array...,
gs.predict_proba(...feature set df...)[:, 1])
roc_auc['micro'] = auc(fpr['micro'], tpr['micro'])
爲什麼會有這樣的差異?我的代碼有問題嗎?
謝謝! 克里斯
大。所以如果我要爲這個模型正式報告AUC,我會用第二個(0.97)?而且我猜「微」的版本可能比在這種情況下,「宏觀」更好,因爲它需要標籤不平衡考慮在內。這就是說,你知道'微'與'宏'的好解釋(如果它與AUC計算有關,那麼獎金)?我的數據集有一幫真正的Falses和預測Falses的,不會在誤報率或真陽性率出現。這會影響我使用micro vs macro的決定嗎?謝謝!! – Chris
不完全 - 報告一個合理的AUC「正式」你需要某種這是沒有經過培訓就持有了測試集。使用培訓數據來報告測試/性能指標是欺騙行爲,並且總是過度報告。我將使用LOWER(第一)分數作爲您報告的AUC。對於宏觀和微觀,我發佈的鏈接應該解釋它。 – mprat