召回率、准确率与F度量
分类模型评估API
sklearn.metrics.classification_report(y_true, y_pred, target_names=None)
- y_true:真实目标值
- y_pred:估计器预测目标值
- target_names:目标类别名称
- return:每个类别精确率与召回率
朴素贝叶斯
平常我们对一篇文章进行分类,分类就是确确实实的一个结果,但是朴素贝叶斯是用到了概率的思想。如一篇文章属于科技的概率是85%,属于娱乐的概率是15%,那么我们最终判定这篇文章属于科技类型
联合概率和条件概率
朴素贝叶斯分类
朴素体现在各个词都是完全独立不相干的
为了应对概率可能是0的情况,引入了拉普拉斯平滑
API
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
alpha:拉普拉斯平滑系数
案例
sklearn20类新闻分类;20个新闻组数据集包含20个主题的18000个新闻组帖子
from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics import classification_report
cv = CountVectorizer()
news = fetch_20newsgroups(subset='all')
# data 是列表套字符串的形式
data = news.data
# target 是一个一维的ndarray
target = news.target
# x_train 是列表套字符串的形式, y_train 是一维的ndarray
x_train, x_test, y_train, y_test = train_test_split(data, target, test_size=0.25)
# 特征工程, x_train是 sparse 矩阵, fit_transform 的参数是字符串或者包含字符串的可迭代对象
x_train = cv.fit_transform(x_train)
x_test = cv.transform(x_test)
# 预测,fit predict score 等方法参数都是矩阵
mnb = MultinomialNB()
mnb.fit(x_train, y_train)
y_predict = mnb.predict(x_test)
print('准确率是', mnb.score(x_test, y_test))
print('*' * 40)
print(classification_report(y_test, y_predict, target_names=news.target_names))
结果
准确率是 0.858870967742
****************************************
precision recall f1-score support
alt.atheism 0.89 0.89 0.89 225
comp.graphics 0.61 0.86 0.71 211
comp.os.ms-windows.misc 0.98 0.21 0.34 233
comp.sys.ibm.pc.hardware 0.70 0.83 0.76 259
comp.sys.mac.hardware 0.89 0.92 0.90 232
comp.windows.x 0.78 0.89 0.83 243
misc.forsale 0.94 0.76 0.84 232
rec.autos 0.86 0.94 0.90 226
rec.motorcycles 0.99 0.92 0.95 265
rec.sport.baseball 0.96 0.96 0.96 256
rec.sport.hockey 0.97 0.97 0.97 261
sci.crypt 0.84 0.96 0.89 224
sci.electronics 0.88 0.85 0.87 244
sci.med 0.93 0.89 0.91 256
sci.space 0.90 0.93 0.92 259
soc.religion.christian 0.82 0.98 0.90 264
talk.politics.guns 0.87 0.95 0.91 225
talk.politics.mideast 0.86 0.98 0.92 225
talk.politics.misc 0.82 0.84 0.83 212
talk.religion.misc 0.96 0.49 0.65 160
avg / total 0.87 0.86 0.85 4712
朴素贝叶斯特点
- 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
- 分类准确度高,速度快