我是机器学习的新手,正在尝试根据给定的标记数据集预测文章的主题,每个数据集包含一篇文章中的所有单词。总共有11个不同的主题,每篇文章只有一个主题。我已经构建了一个流程管道:
classifier = Pipeline([ ('vectorizer', CountVectorizer()), ('tfidf', TfidfTransformer()), ('clf', OneVsRestClassifier(XGBClassifier(objective="multi:softmax", num_class=11), n_jobs=-1)),])
我正在尝试实现GridsearchCV来寻找最佳超参数:
parameters = {'vectorizer__ngram_range': [(1, 1), (1, 2),(2,2)], 'tfidf__use_idf': (True, False)}gs_clf_svm = GridSearchCV(classifier, parameters, n_jobs=-1, cv=10, scoring='f1_micro')gs_clf_svm = gs_clf_svm.fit(X, Y)
这运行得很好,但是,我如何调整XGBClassifier的超参数呢?我尝试使用以下符号:
parameters = {'clf__learning_rate': [0.1, 0.01, 0.001]}
它不起作用,因为GridSearchCV正在寻找OneVsRestClassifier的超参数。那么如何实际调整XGBClassifier的超参数呢?另外,您建议我应该调整哪些超参数来解决我的问题?
回答:
当前,管道在OneVsRestClassifier中查找learning_rate
参数,找不到(不出所料,因为该模块没有这样的参数),并引发错误。由于您实际上想要的是XGBClassifier的learning_rate
参数,您应该深入一级,即:
parameters = {'clf__estimator__learning_rate': [0.1, 0.01, 0.001]}