1

我試圖使用scoring參數GridSearchCV中的參數log_loss來調整此多類(6類)分類器。我不明白如何給它一個label參數。即使我給它sklearn.metrics.log_loss,它會改變交叉驗證的每個迭代,所以我不知道如何給它labels參數?如何在Scikit-Learn(sklearn)中使用`GridSearchCV`中的`log_loss`和多類標籤?

我使用Python v3.6Scikit-Learn v0.18.1

如何使用GridSearchCVlog_loss多級車型調整?

我班表示:

1 31 
2 18 
3 28 
4 19 
5 17 
6 22 
Name: encoding, dtype: int64 

我的代碼:

param_test = {"criterion": ["friedman_mse", "mse", "mae"]} 
gsearch_gbc = GridSearchCV(estimator = GradientBoostingClassifier(n_estimators=10), 
         param_grid = param_test, scoring="log_loss", n_jobs=1, iid=False, cv=cv_indices) 
gsearch_gbc.fit(df_attr, Se_targets) 

這裏的誤差和滿一個的尾部是在這裏https://pastebin.com/1CshpEBN

ValueError: y_true contains only one label (1). Please provide the true labels explicitly through the labels argument. 

UPDATE : 只需使用這使基於基於@Grr

log_loss_build = lambda y: metrics.make_scorer(metrics.log_loss, greater_is_better=False, needs_proba=True, labels=sorted(np.unique(y))) 
+0

在這裏打印你的'Se_targets'。還可以看一下http://scikit-learn.org/stable/modules/model_evaluation.html#multilabel-ranking-metrics –

回答

2

射手我的假設是,不知何故你的數據拆分中只有一個y_true類的標籤。雖然這似乎不太可能基於你發佈的發行版,我想這是可能的。雖然我沒有遇到過這似乎[sklearn.metrics.log_loss](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html)標籤參數預計如果標籤都是相同的。如果labels未被通過,文檔的這一部分的措詞也使得該方法看起來好像是將二進制分類歸類。

現在,當你正確地認爲你應該通過log_lossscorer=sklearn.metrics.log_loss(labels=your_labels)

+0

我的標籤是否與「y_true」相同? –

+0

我相信你會通過你的類列表,即'[1,2,3,4,5,6]'。它看起來像'labels ='kwarg使用'LabelBinarizer'來創建標籤類,然後二進制化y_true值。請查看源代碼[here](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/classification.py#L1557-L1677) – Grr

+0

'TypeError:log_loss()missing 2個需要的位置參數:'y_true'和'y_pred''該方法需要2個默認參數,這些參數在交叉驗證期間會改變。 –

1

你可以簡單地指定「neg_log_loss_scorer」(或「log_loss_scorer」)在舊版本將使用負對數損失。

+0

很好理解!謝謝 –

相關問題