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

 贝叶斯分类

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

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

2下载数据集

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

下一步

 

下载保存到

 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)

 

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

 

2

 

3

 

 

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()

 

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值