【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集

 贝叶斯分类

1高斯贝叶斯、多项式贝叶斯、伯努利贝叶斯的比较

GaussianNB解决连续型数据的模型,期望样本特征取值都是符合正太分布
 MultinomialNB 大文本集的分类处理(文章影评)适合有几个
BernoulliNB  小文本集的分类处理(短信、消息、商品评论)适合判断有无

2下载数据集

数据集:UCI Machine Learning Repository: SMS Spam Collection Data Set

【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第1张图片

下一步

【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第2张图片 

下载保存到

【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第3张图片

【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第4张图片

 3代码

 1、导入包 加载保存数据集

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# 读数据集pd.read_table('./data/SMSSpamCollection')
pd.read_csv('./data/SMSSpamCollection', sep='\t',header=None)

 【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第5张图片

2词频集转换

1)转换流程
完成词频集转换
cv=CountVectorizer()
cv.fit(text)
data=cv.transform(text)
#data=cv.fit_transform(text)简化版
完成逆文档频率转换
tfidf=TfidfTransformer()
tfidf.fit(data)
resullt=tfidf.transform(data)
#resullt=tfidf.fit_transform(data)简化版

2)超级进化版本

from sklearn.feature_extraction.text import TfidfVectorizer
tv=TfidfVectorizer()
data=tv.fit_transform(text)
DataFrame(data=data.toarray(),columns=tv.get_feature_names())

#保存数据集
SMS=pd.read_csv('./data/SMSSpamCollection', sep='\t',header=None)
text=SMS[1].copy()
target=SMS[0].copy()
from sklearn.feature_extraction.text import TfidfVectorizer
tv=TfidfVectorizer()
data=tv.fit_transform(text).toarray()

简单查阅一下jupyter notebook

1、data  data类型 data的shape

 【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第6张图片

2

 【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第7张图片

3

【机器学习】贝叶斯分类原理+实战垃圾短信分类-SMSSpamCollection下载数据集_第8张图片

 

 

3停用词处理

目的:把无意义的词删除
维护一个停用词
stop_words=["?","hehe","100"]
停用词组在构造转换对象时候直接配置
tv=TfidfVectorizer( stop_words=stop_words , ngram_range=(1,3))
data=tv.fit_transform(text).toarray()

(本实战未作停用词处理)

4、建模

#建模贝叶斯
from sklearn.naive_bayes import MultinomialNB,BernoulliNB
from sklearn.linear_model import LogisticRegression
mnb=MultinomialNB()#适合大型文本集
bnb=BernoulliNB()#适合小型
lr=LogisticRegression()
#多项式的正确率
from sklearn.model_selection import cross_val_score
cross_val_score(mnb,data,target,cv=10).mean()

#伯努利正确率
cross_val_score(bnb,data,target,cv=10).mean()

 

 5、附加:格外对比LogisticRegression(可省略)

#网格构参
from sklearn.model_selection import GridSearchCV
#要搜索的有参集合
param_grid={
    "penalty":["l1","l2"],
    "C":[0.001,0.01,0.1,0.5,1,5,10,100]
}
#构造一个网格搜索对象,cv指k折现拆分策略
gscv=GridSearchCV(estimator=lr,param_grid=param_grid,cv=5)
# 开始搜索
gscv.fit(data,target)
best_model=gscv.best_estimator_
cross_val_score(best_model,data,target,cv=10).mean()

 

你可能感兴趣的:(机器学习,分类,人工智能)