【发布时间】:2018-07-08 12:37:08
【问题描述】:
我正在使用 Python 解决一些文本文档的二进制分类问题并实现 scikit-learn 库,我希望尝试不同的模型来比较和对比结果 - 主要使用 朴素贝叶斯分类器,带 K 的 SVM -折叠 CV,CV=5。鉴于后两种模型使用gridSearchCV(),我发现将所有方法组合到一个管道中存在困难。由于并发问题,我不能在单个实现期间运行多个管道,因此我需要使用一个管道来实现所有不同的模型。
这是我到现在为止的,
# pipeline for naive bayes
naive_bayes_pipeline = Pipeline([
('bow_transformer', CountVectorizer(analyzer=split_into_lemmas, stop_words='english')),
('tf_idf', TfidfTransformer()),
('classifier', MultinomialNB())
])
# accessing and using the pipelines
naive_bayes = naive_bayes_pipeline.fit(train_data['data'], train_data['gender'])
# pipeline for SVM
svm_pipeline = Pipeline([
('bow_transformer', CountVectorizer(analyzer=split_into_lemmas, stop_words='english')),
('tf_idf', TfidfTransformer()),
('classifier', SVC())
])
param_svm = [
{'classifier__C': [1, 10], 'classifier__kernel': ['linear']},
{'classifier__C': [1, 10], 'classifier__gamma': [0.001, 0.0001], 'classifier__kernel': ['rbf']},
]
grid_svm_skf = GridSearchCV(
svm_pipeline, # pipeline from above
param_grid=param_svm, # parameters to tune via cross validation
refit=True, # fit using all data, on the best detected classifier
n_jobs=-1, # number of cores to use for parallelization; -1 uses "all cores"
scoring='accuracy',
cv=StratifiedKFold(train_data['gender'], n_folds=5), # using StratifiedKFold CV with 5 folds
)
svm_skf = grid_svm_skf.fit(train_data['data'], train_data['gender'])
predictions_svm_skf = svm_skf.predict(test_data['data'])
编辑 1:
第二个管道是唯一使用gridSearchCV() 的管道,似乎从未执行过。
编辑 2:
添加了更多代码以显示 gridSearchCV() 的使用。
【问题讨论】:
-
并发问题是什么意思?你的内存不足了吗?如何将每个管道(在适合之后)保存到文件中?然后加载你想要的并训练你的模型。另外,请分享您看到的任何错误消息。
-
您能否详细说明“由于并发问题,我不能在单个实现期间运行多个管道”,我怀疑这是X-Y problem。至少,
Pipeline可以解决哪些并发问题对我来说并不明显。 -
@pault 我似乎无法开始执行第二个管道,因为我已经有一个正在运行的管道。
-
那么,第二个管道是使用网格搜索的管道......为什么你说它似乎永远不会被执行?我认为您应该将此作为edit 扩展为您的问题,然后才能成为一长串 cmets。
-
@denbuttigieg,尝试通过
GridSearchCV(..., verbose=3)并检查它输出什么...
标签: python scikit-learn classification pipeline