python – 将多个算法与sklearn管道进行比较
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 将多个算法与sklearn管道进行比较,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2307字,纯文字阅读大概需要4分钟。
内容图文
![python – 将多个算法与sklearn管道进行比较](/upload/InfoBanner/zyjiaocheng/811/48b4d61d797743328d092f79df406d84.jpg)
我正在尝试建立一个scikit-learn管道来简化我的工作.我面临的问题是我不知道哪种算法(随机森林,朴素贝叶斯,决策树等)最合适,所以我需要尝试每种算法并比较结果.但管道一次只能采用一种算法吗?例如,下面的管道只接受SGDClassifier()作为算法.
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', SGDClassifier()),])
如果我想比较不同的算法,我该怎么办?我可以这样做吗?
pipeline = Pipeline([
('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', SGDClassifier()),
('classifier', MultinomialNB()),])
我不想将其分解为两个管道,因为数据的预处理非常耗时.
提前致谢!
解决方法:
预处理
你说预处理数据非常慢,所以我假设你考虑预处理的TF-IDF矢量化部分.
你可以只预处理一次.
X = <your original data>
from sklearn.feature_extraction.text import TfidfVectorizer
X = TfidfVectorizer().fit_transform(X)
获得新的转换数据后,您可以继续使用它并选择最佳分类器.
优化TF-IDF变压器
虽然您可以使用TfidfVectorizer转换数据一次,但我不推荐它,因为TfidfVectorizer本身也有超参数,也可以进行优化.最后,您希望一起优化整个管道,因为TfidfVectorizer ina Pipeline [TfidfVectorizer,SGDClassifier]的参数可能与Pipeline [TfidfVectorizer,MultinomialNB]不同.
创建自定义分类器
要准确回答您的问题,您可以制作自己的估算器,将模型选择作为超参数.
from sklearn.base import BaseEstimator
class MyClassifier(BaseEstimator):
def __init__(self, classifier_type: str = 'SGDClassifier'):
"""
A Custome BaseEstimator that can switch between classifiers.
:param classifier_type: string - The switch for different classifiers
"""
self.classifier_type = classifier_type
def fit(self, X, y=None):
if self.classifier_type == 'SGDClassifier':
self.classifier_ = SGDClassifier()
elif self.classifier_type == 'MultinomialNB':
self.classifier_ = MultinomialNB()
else:
raise ValueError('Unkown classifier type.')
self.classifier_.fit(X, y)
return self
def predict(self, X, y=None):
return self.classifier_.predict(X)
然后,您可以在管道中使用此客户分类器.
pipeline = Pipeline([
('tfidf', TfidfVectorizer()),
('clf', MyClassifier())
])
然后你可以使用GridSearchCV来选择最好的模型.创建参数空间时,可以使用双下划线指定管道中步骤的超参数.
parameter_space = {
'clf__classifier_type': ['SGDClassifier', 'MultinomialNB']
}
from sklearn.model_selection import GridSearchCV
search = GridSearchCV(pipeline , parameter_space, n_jobs=-1, cv=5)
search.fit(X, y)
print('Best model:\n', search.best_params_)
内容总结
以上是互联网集市为您收集整理的python – 将多个算法与sklearn管道进行比较全部内容,希望文章能够帮你解决python – 将多个算法与sklearn管道进行比较所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。