加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

scikit-learn:构建文本分类的“pipeline”简化分类过程、网格搜

发布时间:2020-12-13 22:17:49 所属栏目:百科 来源:网络整理
导读:前两篇分别将“加载数据”和“提取tf、tf-idf,进而构建分类器”,其实这个过程, vectorizer = transformer = classifier ,早已被“ scikit-learn provides a Pipeline class ”一下就可以搞定: 本篇翻译: http://scikit-learn.org/stable/tutorial/text

前两篇分别将“加载数据”和“提取tf、tf-idf,进而构建分类器”,其实这个过程,vectorizer => transformer => classifier,早已被“scikit-learnprovides aPipelineclass”一下就可以搞定:

本篇翻译:

http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html,

1、Building a pipeline(构建生产线)

>>> from sklearn.pipeline import Pipeline
>>> text_clf = Pipeline([('vect',CountVectorizer()),...                      ('tfidf',TfidfTransformer()),...                      ('clf',MultinomialNB()),... ])
注意:vect、tfidf、clf这三个名字可以随意。

text_clf = text_clf.fit(rawData.data,rawData.target)
predicted = text_clf.predict(rawData.data) #假设预测数据就是rawData.data(不想再生成数据了。。)
输出准确率:
import numpy as np
np.mean(predicted == rawData.target)
Out[70]: 1.0
更详尽的分析:
from sklearn import metrics
print(metrics.classification_report(rawData.target,predicted,...     target_names=rawData.target_names))
                   precision    recall  f1-score   support

category_1_folder       1.00      1.00      1.00         2
category_2_folder       1.00      1.00      1.00         2
category_3_folder       1.00      1.00      1.00         2

      avg / total       1.00      1.00      1.00         6

混淆矩阵:
metrics.confusion_matrix(rawData.target,predicted)
Out[73]: 
array([[2,0],[0,2,2]])



2、Parameter tuning using grid search(使用网格搜索调参)

思想: run an exhaustive search of the best parameters on a grid of possible values。

from sklearn.grid_search import GridSearchCV
parameters = {'vect__ngram_range': [(1,1),(1,2)],...               'tfidf__use_idf': (True,False),...               'clf__alpha': (1e-2,1e-3),}
注意:n_jobs=-1,高速网格搜索自动检测机器是几个核,并使用所有的核并行跑程序。。。
gs_clf = GridSearchCV(text_clf,parameters,n_jobs=-1)
gs_clf = gs_clf.fit(rawData.data[:4],rawData.target[:4])
twenty_train.target_names[gs_clf.predict(['i love this'])]
'category_2_folder'
输出效果最好的参数:
best_parameters,score,_ = max(gs_clf.grid_scores_,key=lambda x: x[1])
for param_name in sorted(parameters.keys()):
...   print("%s: %r" % (param_name,best_parameters[param_name]))
clf__alpha: 0.001
tfidf__use_idf: True
vect__ngram_range: (1,1)
>>> score                                              
1.000...



至此,一个完整的,完全有scikit-learn写出来的机器学习过程搞定了。。。。。

学习中。。。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读