事实上,TPOT 也应该适用于多类数据——文档中的示例是 MNIST 数据集(10 个类)。
该错误与f1_score
; 保留您的代码n_classes=3
,并要求
tpot = TPOTClassifier(generations=10, population_size=20, verbosity=2)
(即使用默认值scoring='accuracy'
)工作正常:
Warning: xgboost.XGBClassifier is not available and will not be used by TPOT.
Generation 1 - Current best internal CV score: 0.7447422496202984
Generation 2 - Current best internal CV score: 0.7447422496202984
Generation 3 - Current best internal CV score: 0.7454927186634503
Generation 4 - Current best internal CV score: 0.7454927186634503
Generation 5 - Current best internal CV score: 0.7706334316090413
Generation 6 - Current best internal CV score: 0.7706334316090413
Generation 7 - Current best internal CV score: 0.7706334316090413
Generation 8 - Current best internal CV score: 0.7706334316090413
Generation 9 - Current best internal CV score: 0.7757616367372464
Generation 10 - Current best internal CV score: 0.7808898418654516
Best pipeline:
LogisticRegression(KNeighborsClassifier(DecisionTreeClassifier(input_matrix, criterion=entropy, max_depth=3, min_samples_leaf=15, min_samples_split=12), n_neighbors=6, p=2, weights=uniform), C=0.01, dual=False, penalty=l2)
TPOTClassifier(config_dict={'sklearn.linear_model.LogisticRegression': {'penalty': ['l1', 'l2'], 'C': [0.0001, 0.001, 0.01, 0.1, 0.5, 1.0, 5.0, 10.0, 15.0, 20.0, 25.0], 'dual': [True, False]}, 'sklearn.decomposition.PCA': {'iterated_power': range(1, 11), 'svd_solver': ['randomized']}, 'sklearn.feature_selection.Se...ocessing.PolynomialFeatures': {'degree': [2], 'interaction_only': [False], 'include_bias': [False]}},
crossover_rate=0.1, cv=5, disable_update_check=False,
early_stop=None, generations=10, max_eval_time_mins=5,
max_time_mins=None, memory=None, mutation_rate=0.9, n_jobs=1,
offspring_size=20, periodic_checkpoint_folder=None,
population_size=20, random_state=None, scoring=None, subsample=1.0,
verbosity=2, warm_start=False)
使用文档中建议的用法询问 F1 分数,即:
tpot = TPOTClassifier(generations=10, population_size=20, verbosity=2, scoring='f1')
再次产生您报告的错误,可能是因为中的默认参数f1_score
is average='binary'
,这对于多类问题确实没有意义,而简单f1
仅适用于二元问题(docs)。
在 中明确使用 F1 分数的其他一些变体scoring
,例如f1_macro
,f1_micro
或f1_weighted
工作正常(未显示)。