gpt4 book ai didi

python - 使用 : GridSearchCV, 管道、OneVsRestClassifier、SGDClassifier 的 Scikit-learn 多输出分类器

转载 作者:太空狗 更新时间:2023-10-29 20:16:37 24 4
gpt4 key购买 nike

我正在尝试使用 GridSearchCV 和 Pipeline 构建多输出模型。管道给我带来了麻烦,因为标准分类器示例没有包装分类器的 OneVsRestClassifier() 。我正在使用 scikit-learn 0.18 和 python 3.5

## Pipeline: Train and Predict
## SGD: support vector machine (SVM) with gradient descent
from sklearn.multiclass import OneVsRestClassifier
from sklearn.pipeline import Pipeline
from sklearn.linear_model import SGDClassifier

clf = Pipeline([
('vect', CountVectorizer(ngram_range=(1,3), max_df=0.50 ) ),
('tfidf', TfidfTransformer() ),
('clf', SGDClassifier(loss='modified_huber', penalty='elasticnet',
alpha=1e-4, n_iter=5, random_state=42,
shuffle=True, n_jobs=-1) ),
])

ovr_clf = OneVsRestClassifier(clf )

from sklearn.model_selection import GridSearchCV
parameters = {'vect__ngram_range': [(1,1), (1,3)],
'tfidf__norm': ('l1', 'l2', None),
'estimator__loss': ('modified_huber', 'hinge',),
}

gs_clf = GridSearchCV(estimator=pipeline, param_grid=parameters,
scoring='f1_weighted', n_jobs=-1, verbose=1)
gs_clf = gs_clf.fit(X_train, y_train)

但这会产生错误:....

ValueError: Invalid parameter estimator for estimator Pipeline(steps=[('vect', CountVectorizer(analyzer='word', binary=False, decode_error='strict', dtype=, encoding='utf-8', input='content', lowercase=True, max_df=0.5, max_features=None, min_df=1, ngram_range=(1, 3), preprocessor=None, stop_words=None, strip...er_t=0.5, random_state=42, shuffle=True, verbose=0, warm_start=False), n_jobs=-1))]). Check the list of available parameters with estimator.get_params().keys().

那么使用param_grid和Pipeline通过OneVsRestClassifier向clf传递参数的正确方法是什么?我是否需要在 Pipeline 中将矢量化器和 tdidf 与分类器分开?

最佳答案

将 OneVsRestClassifier() 作为管道本身的一个步骤传递,并将 SGDClassifier 作为 OneVsRestClassifier 的估计器传递。你可以这样走。

pipeline = Pipeline([
('vect', CountVectorizer(ngram_range=(1,3), max_df=0.50 ) ),
('tfidf', TfidfTransformer() ),
('clf', OneVsRestClassifier(SGDClassifier(loss='modified_huber', penalty='elasticnet',
alpha=1e-4, n_iter=5, random_state=42,
shuffle=True, n_jobs=-1) )),
])

其余代码可以保持不变。 OneVsRestClassifier 充当其他估计器的包装器。

关于python - 使用 : GridSearchCV, 管道、OneVsRestClassifier、SGDClassifier 的 Scikit-learn 多输出分类器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40352612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com