【发布时间】:2022-02-06 11:33:47
【问题描述】:
我正在研究一个简单的多输出分类问题,并注意到在运行以下代码时会出现此错误:
ValueError: Target is multilabel-indicator but average='binary'. Please
choose another average setting, one of [None, 'micro', 'macro', 'weighted', 'samples'].
我理解它所引用的问题,即在评估多标签模型时,需要明确设置平均类型。尽管如此,我无法弄清楚这个average 参数应该放在哪里,因为只有accuracy_score、precision_score、recall_score 内置方法有这个参数,我没有在我的代码中明确使用。此外,由于我正在执行RandomizedSearch,因此我也不能只将precision_score(average='micro') 传递给scoring 或refit 参数,因为precision_score() 需要正确且真实的y 标签才能传递。这就是为什么 this former SO question 和 this one here 都存在类似问题,但没有帮助的原因。
我的示例数据生成代码如下:
from sklearn.datasets import make_multilabel_classification
from sklearn.naive_bayes import MultinomialNB
from sklearn.multioutput import MultiOutputClassifier
from sklearn.model_selection import RandomizedSearchCV
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import MinMaxScaler
X, Y = make_multilabel_classification(
n_samples=1000,
n_features=2,
n_classes=5,
n_labels=2
)
pipe = Pipeline(
steps = [
('scaler', MinMaxScaler()),
('model', MultiOutputClassifier(MultinomialNB()))
]
)
search = RandomizedSearchCV(
estimator = pipe,
param_distributions={'model__estimator__alpha': (0.01,1)},
scoring = ['accuracy', 'precision', 'recall'],
refit = 'precision',
cv = 5
).fit(X, Y)
我错过了什么?
【问题讨论】:
标签: python scikit-learn multilabel-classification hyperparameters