Python机器学习之垃圾短信分类(用朴素贝叶斯算法的伯努利模型和多项式...
Python机器学习之垃圾短信分类(⽤朴素贝叶斯算法的伯努利模型和多项式模
型分类垃圾短信数。。。
终极三国赵云⼀. 数据集下载地址
⼆. 打开下载的.txt⽂件,可以看到数据集长这样,标签(ham和spam,spam就是指垃圾短信)与⽂本之间的分隔符是⼀个tab键,也就
是‘\t’
三. ⾸先⽤pd.read_csv函数读取该数据集时要注意设置分隔符sep=’\t’,然后⽤replace⽅法把“ham”标签⽤0替代,“spam”⽤1替代,⽅便看预测结果。
ad_csv(path,sep='\t', header=None, names=Cnames)
place({'ham':0,'spam':1})#替换标签值
print('数据集展⽰:')
print(data)
读取出来像这样:
朴素贝叶斯算法分类垃圾短信,就是要出哪些单词最常出现在垃圾短信中,将这些最常出现的单词,作为特殊单词,⽤来过滤短信。接下来就是⽤词袋⽅法处理⽂本信息,也就是统计⼀⼤段话⾥的不同单词的出现次数,最后得到⼀个频率矩阵,矩阵的⾏就是数据集⾥的每⼀⾏短信,矩阵的列就是短信⾥每个单词,元素值就是该单词的出现频率。有了频率,那么特殊单词也就能到了。可以⽤sklearn库提供的CountVectorizer()⽅法实现词袋处理。刘烨谢娜分手原因
from sklearn. import CountVectorizer
#random_state等于哪个正整数随意
x_train,x_test,y_train,y_test=train_test_split(X,y,train_size=0.8,random_state=123)
vector_nomial=CountVectorizer()#实现词袋模型
train_matrix=vector_nomial.fit_transform(x_train)
test_matrix=ansform(x_test)
四. 将训练数据和测试数据输⼊到词袋模型⾥,就可以得到对应的频率矩阵。最后分别运⽤sklearn提供的伯努利模型和多项式模型对垃圾短信进⾏分类。
from sklearn.naive_bayes import BernoulliNB,MultinomialNB
polynomial=MultinomialNB()
clm_nomial=polynomial.fit(train_matrix,y_train)
result_nomial=clm_nomial.predict(test_matrix)
两个模型返回的分类结果都是长度为1115(我设置的训练集占⽐为80%),类型为ndarray的列表。最终,多项式模型的R²分值(决定系数)为0.986,伯努利模型的R²分值为0.980。⼆者的分类结果⼏乎是相同的。
五. 完整代码
鼓舞人心的话
from sklearn.naive_bayes import BernoulliNB,MultinomialNB
from sklearn. import CountVectorizer
del_selection import train_test_split
import pandas as pd
path ='E:/Python_file/'小麦的价格
Cnames=['labels','messages']
data = pd.read_csv(path,sep='\t', header=None, names=Cnames)#读取数据集,分隔符是\t place({'ham':0,'spam':1})#替换标签值
print('数据集展⽰:')
print(data)
print('\n----------------------------------\n')
X=data['messages']
y=data['labels']
x_train,x_test,y_train,y_test=train_test_split(X,y,train_size=0.8,random_state=123)
vector_nomial=CountVectorizer()#实现词袋模型联想笔记本如何设置光驱启动
vector_bernou=CountVectorizer()
#多项式模型分类垃圾短信
train_matrix=vector_nomial.fit_transform(x_train)
test_matrix=ansform(x_test)
polynomial=MultinomialNB()
clm_nomial=polynomial.fit(train_matrix,y_train)
result_nomial=clm_nomial.predict(test_matrix)
#伯努利模型分类垃圾短信
怎么发
train_matrix=vector_bernou.fit_transform(x_train)
test_matrix=ansform(x_test)
Bernoulli=BernoulliNB()
clm_bernoulli=Bernoulli.fit(train_matrix,y_train)
result_bernou=clm_bernoulli.predict(test_matrix)
print('多项式模型的预测结果,类型,长度:')
print(result_nomial,type(result_nomial),result_nomial.shape)
print('多项式模型的前⼀百个预测结果:')
print(result_nomial[0:100])
print('多项式模型模型R²评分:'+str(clm_nomial.score(test_matrix,y_test)))
print('\n----------------------------------\n')
print('伯努利模型的预测结果,类型,长度:')
print(result_bernou,type(result_bernou),result_bernou.shape)
print('伯努利模型的前⼀百个预测结果:')
print(result_bernou[0:100])
print('伯努利模型R²评分:'+str(clm_bernoulli.score(test_matrix,y_test)))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。