3.【基础】新闻文本数据的分类--NaiveBayes

本文所有实现代码均来自《Python机器学习及实战》

#-*- coding:UTF-8 -*-

#第一步:读取20类新闻文本的数据细节
from sklearn.datasets import fetch_20newsgroups
#与之前预存的数据不同,fetch_20newsgroups需要即时从互联网下载数据
news=fetch_20newsgroups(subset='all')
#查验数据规模和细节
print len(news.data)
print news.data[0]
#由输出可知,我们共有18846条新闻数据,不同于前面的样例数据,这些文本数据既没有被设定特征,也没有数字化的量度(即数字化表示),因此需要进行数据的预处理

#第二步:数据分割
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test=train_test_split(news.data,news.target,test_size=0.25,random_state=33)

#第三步:使用朴素贝叶斯分类器进行模型训练并预测
#从sklearn.feature_extraction.text里导入文本特征向量转化模块
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
#将文本转化为特征向量
X_train = vec.fit_transform(X_train)
X_test = vec.transform(X_test)
#从sklearn.naive_baye里导入朴素贝叶斯模型
from sklearn.naive_bayes import MultinomialNB
mnb = MultinomialNB()
mnb.fit(X_train,y_train)
y_predict=mnb.predict(X_test)

#第四步:对朴素贝叶斯分类器的性能进行评估
from sklearn.metrics import classification_report
print 'Accuracy of Naive Bayes :',mnb.score(X_test,y_test)
print classification_report(y_predict,y_test,target_names=news.target_names)

#总结:
#朴素贝叶斯模型被广泛应用于海量互联网文本分类任务,由于其较强的特征独立性假设,使得模型预测所需要的参数规模从幂指数量级下降到线性量级
#极大地节约了内存消耗和计算时间
#缺点是,在数据的特征关联性较强的分类任务上性能表现不佳

你可能感兴趣的:(机器学习实战,机器学习,文本分类,朴素贝叶斯)