GaussianNB解决连续型数据的模型,期望样本特征取值都是符合正太分布
MultinomialNB 大文本集的分类处理(文章影评)适合有几个
BernoulliNB 小文本集的分类处理(短信、消息、商品评论)适合判断有无
数据集:UCI Machine Learning Repository: SMS Spam Collection Data Set
下一步
下载保存到
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)
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
目的:把无意义的词删除
维护一个停用词
stop_words=["?","hehe","100"]
停用词组在构造转换对象时候直接配置
tv=TfidfVectorizer( stop_words=stop_words , ngram_range=(1,3))
data=tv.fit_transform(text).toarray()
(本实战未作停用词处理)
#建模贝叶斯
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()
#网格构参
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()