文章目录
操作平台: windows10, python37, jupyter
数据下载: https://www.lanzous.com/iaghe8f
1、导入数据
import pandas as pd
# BernoulliNB 二分布,硬币,正面反面,概率差不多
# MultinomialNB 投掷筛子,多分布,6个面概率差不多
from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB
1.1、读取数据“SMSSpamCollection”
#读取数据并命名表头
data = pd.read_csv('../data/SMSSpamCollection',sep = '\t',header=None,names=['target','message'])
data.shape #结果为(5572, 2)
data.head()
target | message | |
---|---|---|
0 | ham | Go until jurong point, crazy.. Available only ... |
1 | ham | Ok lar... Joking wif u oni... |
2 | spam | Free entry in 2 a wkly comp to win FA Cup fina... |
3 | ham | U dun say so early hor... U c already then say... |
4 | ham | Nah I don't think he goes to usf, he lives aro... |
结果分析: 短信就只有两种类型,ham表示正常的短信,spam表示垃圾短信。
1.2、确定研究对象
X = data['message'] #提取消息
y = data['target'] #提取标签
X.unique().size #统计去重后的大小
5169
结果分析: 原数据中有5572条信息,不重复的有5169条,可以不用去重,它不会影响训练的模型。
2、统计词频
2.1、文本向量化处理
# 统计词频,文本向量化处理
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer() #可以设置停用词stop_words='english'
X_cv = cv.fit_transform(X)
X_cv
<5572x8713 sparse matrix of type '<class 'numpy.int64'>'
with 74169 stored elements in Compressed Sparse Row format>
查看向量化结果:
print(X_cv)
(0, 8324