怎么样提高sklearn 贝叶斯分类器分类器的正确率

sklearn(2)
常用的分类器包括SVM、KNN、贝叶斯、线性回归、逻辑回归、决策树、随机森林、xgboost、GBDT、boosting、神经网络NN。
代码如下:
from&sklearn.metrics&import&precision_recall_fscore_support
def&timeDecor(func):
#一个用于统计函数运行时间的装饰器
&&&&def&innerDef(*args,&**kwargs):
&&&&&&&&t1&=&time.time()
&&&&&&&&result&=&func(*args,&**kwargs)
&&&&&&&&t2&=&time.time()
&&&&&&&&t&=&t2&-&t1
&&&&&&&&print&&{0}函数部分运行时间&:{1}s&.format(str(func.__name__),t)
&&&&&&&&return&result
&&&&return&innerDef
@timeDecor
def&svm_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn&import&svm
&&&&param_grid&=&{
&&&&&&&&&&&&&&&&&&#&'C':&[1e3,&5e3,&1e4,&5e4,&1e5],
&&&&&&&&&&&&&&&&&&'kernel':&['rbf','linear','poly','sigmoid'],
&&&&&&&&&&&&&&&&&&#&'gamma':&[0.5,&0.001,&0.005,&0.01,&0.1],
&&&&&&&&&&&&&&&&&&}
&&&&t0&=&time()
&&&&clf&=&svm.SVC()
&&&&clf.fit(X_train,&y_train)
&&&&#&print(clf.best_params_)
&&&&print(&svm&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_train&=&clf.predict(X_train)
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&SVM&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&rf_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.ensemble&import&RandomForestClassifier
&&&&t0&=&time()
&&&&clf&=&RandomForestClassifier(random_state=0,&n_estimators=500)
&&&&clf.fit(X_train,&y_train)
&&&&print(&rf&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_train&=&clf.predict(X_train)
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&rf&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&knn_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.neighbors&import&KNeighborsClassifier
&&&&t0&=&time()
&&&&clf&=&KNeighborsClassifier(n_neighbors=5)
&&&&clf.fit(X_train,&y_train)
&&&&print(&knn&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_train&=&clf.predict(X_train)
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&knn&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&bagging_knn_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.neighbors&import&KNeighborsClassifier
&&&&from&sklearn.ensemble&import&BaggingClassifier
&&&&t0&=&time()
&&&&clf&=&BaggingClassifier(KNeighborsClassifier(),
&&&&&&&&&&&&&&&&&&&&&&&&&&&&max_samples=0.5,&max_features=0.5)
&&&&clf.fit(X_train,&y_train)
&&&&print(&bagging_knn&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&bagging_knn&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&lr_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.linear_model&import&LogisticRegression
&&&&t0&=&time()
&&&&clf&=&LogisticRegression(C=1e5)
&&&&clf.fit(X_train,&y_train)
&&&&print(&lr&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_train&=&clf.predict(X_train)
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&lr&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&nb_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.naive_bayes&import&GaussianNB
&&&&t0&=&time()
&&&&clf&=&GaussianNB()
&&&&clf.fit(X_train,&y_train)
&&&&print(&nb&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_train&=&clf.predict(X_train)
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&nb&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&da_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.discriminant_analysis&import&QuadraticDiscriminantAnalysis
&&&&t0&=&time()
&&&&clf&=&QuadraticDiscriminantAnalysis()
&&&&clf.fit(X_train,&y_train)
&&&&print(&da&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&da&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&decisionTree_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.tree&import&DecisionTreeClassifier
&&&&t0&=&time()
&&&&clf&=&DecisionTreeClassifier(max_depth=5)
&&&&clf.fit(X_train,&y_train)
&&&&print(&DT&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&DT&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&xgboost_classify(X_train,&y_train,&X_test,&y_test):
&&&&import&xgboost
&&&&t0&=&time()
&&&&clf&=&xgboost.XGBClassifier()
&&&&clf.fit(X_train,&y_train)
&&&&print(&xgboost&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&xgboost&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&GBDT_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.ensemble&import&GradientBoostingClassifier
&&&&t0&=&time()
&&&&clf&=&GradientBoostingClassifier(n_estimators=200)
&&&&clf.fit(X_train,&y_train)
&&&&print(&GBDT&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&GBDT&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
@timeDecor
def&voting_classify(X_train,&y_train,&X_test,&y_test):
&&&&from&sklearn.ensemble&import&GradientBoostingClassifier,&VotingClassifier,&RandomForestClassifier
&&&&import&xgboost
&&&&from&sklearn.linear_model&import&LogisticRegression
&&&&from&sklearn.naive_bayes&import&GaussianNB
&&&&t0&=&time()
&&&&clf1&=&GradientBoostingClassifier(n_estimators=200)
&&&&clf2&=&RandomForestClassifier(random_state=0,&n_estimators=500)
&&&&#&clf3&=&LogisticRegression(random_state=1)
&&&&#&clf4&=&GaussianNB()
&&&&clf5&=&xgboost.XGBClassifier()
&&&&clf&=&VotingClassifier(estimators=[
&&&&&&&&#&('gbdt',clf1),
&&&&&&&&('rf',clf2),
&&&&&&&&#&('lr',clf3),
&&&&&&&&#&('nb',clf4),
&&&&&&&&#&('xgboost',clf5),
&&&&&&&&voting='soft'
&&&&clf.fit(X_train,&y_train)
&&&&print(&voting&done&in&%0.3fs&&%&(time()&-&t0))
&&&&pre_y_test&=&clf.predict(X_test)
&&&&print(&voting&Metrics&:&{0}&.format(precision_recall_fscore_support(y_test,&pre_y_test)))
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6540次
排名:千里之外
原创:11篇
(2)(8)(1)(1)用scikit-learn实现朴素贝叶斯分类器
朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的),同时也是一种简单有效的常用分类算法。关于它的原理,参见。是一个广泛应用的机器学习Python库,它封装了包括在内的若干基础算法。在这篇博客里,我们希望用朴素贝叶斯实现对短文本(新闻标题)的分类。朴素贝叶斯属于有监督分类,需要获取一批已标注的数据作为训练和测试分类器的样本。样本的获取,一般通过人工标注或网页抓取的方式。这里先准备好2w条已标注的新闻标题(共10个标签,每个标签下的样本是均衡的),并以3:1的比例切分训练集和测试集。文本的格式如下:
娱乐\t组图:刘亦菲短裙秀腿 浓妆变冷艳时髦女
其次,将短文本转化为一个多维向量,这涉及到两个问题:一是分词,由于scikit-learn内置的分词器并不支持中文,所以需要指定一个tokenizer(推荐);二是文本到向量的转化方法,考虑到后续可能加大训练集的数量,而短文本的特征相对稀疏,采用了内存占用率较低、仅计算词频的HashingVectorizer。
这里要注意两点:
测试集和训练集只有共用一个vectorizer才能共享vocabulary,避免特征表达不一致的问题。
fit_transform如果用toarray()转化为dense矩阵,计算至少慢两倍以上。
1234vectorizer = HashingVectorizer(tokenizer=comma_tokenizer, non_negative=True)train_data = vectorizer.fit_transform(train_words)test_data = vectorizer.fit_transform(test_words)
然后,我们创建一个多项式的朴素贝叶斯分类器(适用于离散特征的分类),分别输入训练集的文本和标签(要求都为numpy矩阵)进行训练,训练好的分类器再用在测试集文本的分类,以检验分类器的性能。
1234clf = MultinomialNB(alpha=0.01)clf.fit(train_data, numpy.asarray(train_tags))pred = clf.predict(test_data)
最后,比较分类器的预测结果和测试集的真实标签,得到分类器的准确率和召回率。
12m_precision = metrics.precision_score(actual, pred)m_recall = metrics.recall_score(actual, pred)
完整代码请见。从测试的结果来看,准确率和召回率均在8成以上,当然,分类器的性能也依赖于输入数据对应不同类别的可识别度是否足够强。

我要回帖

更多关于 sklearn的分类器 的文章

 

随机推荐