python产生随机数_使用Python进行垃圾短信识别(下篇)

ae1f4866a90217eadd31bf653cbcdbfb.png

点击上方关注我们!

今天向大家介绍一个文本挖掘和可视化具体案例:使用python进行垃圾短信识别,即

基于短信文本内容,建立识别模型,准确地识别出垃圾短信,以解决垃圾短信过滤问题。

今天的内容接着之前的上篇,如果没有看过上篇的,感兴趣的小伙伴可以查看一下哦f2f254d9e4382c59d27ca62e946df4b6.gif

22efd3186a73f61a1e3db8d9ae3b187d.gif

3

文本的向量表示

在这里使用的方法是:

TF-IDF权重策略。

7552640b0d9fd6219afe860b20593e65.png

文本分析实例:

1.sklearn.feature_extraction.text  #文本特征提取模块

2.CountVectorizer           #转化词频向量函数

3.fit_transform()              #转化词频向量方法

4.get_feature_names()    #获取单词集合方法

5.toarray()                       #获取数值矩阵方法

6.TfidfTransformer          #转化tf-idf权重向量函数

7.fit_transform(counts)   #转成tf-idf权重向量方法

1.分词;去除停用词;

2.转换成词频向量

3.转换成TF-IDF权重矩阵

4.特征提取,构建模型

from sklearn.feature_extraction.text import 

CountVectorizer,TfidfTransformer

from sklearn.naive_bayes import GaussianNB

corpus = [    

    'My dog has flea problems, help please.',    

    'Maybe not take him to dog park is stupid.',

    'My dalmation is so cute. I love him my.',

    'Stop posting stupid worthless garbage.',

    'Mr licks ate my steak, what can I do?.',

    'Quit buying worthless dog food stupid'

]

labels = [0,1,0,1,0,1]

transformer = TfidfTransformer()      

#转化tf-idf权重向量函数

vectorizer = CountVectorizer()        

#转化词频向量函数

word_vec = vectorizer.fit_transform(corpus)     

#转成词向量

words = vectorizer.get_feature_names()          

#单词集合

word_cout = word_vec.toarray()                  

#转成ndarray

tfidf = transformer.fit_transform(word_cout)    

#转成tf-idf权重向量

tfidf_ma= tfidf.toarray()                       

#转成ndarray

clf = GaussianNB().fit(tfidf_ma[:4,:],labels[:4])

res = clf.predict(tfidf_ma[4:,:])

4

模型训练及评价

朴素贝叶斯

Python实现:

原始的朴素贝叶斯只能处理离散数据,当 x1,…,xn 是连续变量时,我们可以使用高斯朴素贝叶斯(Gaussian Naive Bayes)完成分类任务。

当处理连续数据时,一种经典的假设是:与每个类相关的连续变量的分布是基于高斯分布的,故高斯贝叶斯的公式如下:

⭐naive Bayes is a decent classifier, but a bad estimator 

高斯朴素贝叶斯

构造方法:sklearn.naive_bayes.GaussianNB

GaussianNB 类构造方法无参数,属性值有: 

 class_prior_ #每一个类的概率 

 theta_ #每个类中各个特征的平均 

 sigma_ #每个类中各个特征的方差

注:GaussianNB 类无score 方法

⭐Python实现——高斯朴素贝叶斯

import numpy as np 

X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) 

Y = np.array([1, 1, 1, 2, 2, 2]) 

from sklearn.naive_bayes import GaussianNB 

clf = GaussianNB() 

clf.fit(X, Y) 

⭐多项式朴素贝叶斯——用于文本分类 

构造方法:

sklearn.naive_bayes.MultinomialNB(alpha=1.0 #平滑参数 

 , fit_prior=True #学习类的先验概率 

 , class_prior=None) #类的先验概率

⭐Python实现——多项式朴素贝叶斯

import numpy as np 

X = np.random.randint(5, size=(6, 100)) 

y = np.array([1, 2, 3, 4, 5, 6]) 

from sklearn.naive_bayes import MultinomialNB 

clf = MultinomialNB() 

clf.fit(X, y)

模型训练与评价

sklearn. model_selection.train_test_split

随机划分训练集和测试集

⭐train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train data和testdata,形式为:

⭐X_train,X_test, y_train, y_test = model_selection.train_test_split(x_data, y_target, test_size=0.4,  random_state=0)

train_test_split参数解释:

⭐x_data:所要划分的样本特征集

⭐y_target:所要划分的样本结果

⭐test_size:样本占比,如果是整数的话就是样本的数量

⭐random_state:是随机数的种子。

随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。

在train和test上提取的feature维度不同,所以让它们相同的方法:让两个CountVectorizer共享vocabulary。

⭐cv1 = CountVectorizer(vocabulary=cv.vocabulary_)

cv_test = cv1.fit_transform(x_test) 

print(cv_test.toarray())  # 测试集的文档词条矩阵

#cv_test、cv_train向量长度应保持一致

8831a3480696940d360b77a36a807ec9.gif下面是具体示例代码:

from data_process import data_process

from sklearn.naive_bayes import GaussianNB

from sklearn.model_selection import train_test_split

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

adata, data_after_stop, lables = data_process()

data_tr, data_te, labels_tr, labels_te = train_test_split(adata, lables, test_size=0.2)

countVectorizer = CountVectorizer()

data_tr = countVectorizer.fit_transform(data_tr)

X_tr = TfidfTransformer().fit_transform(data_tr.toarray()).toarray()

data_te = CountVectorizer(vocabulary=countVectorizer.vocabulary_).fit_transform(data_te)

X_te = TfidfTransformer().fit_transform(data_te.toarray()).toarray()

model = GaussianNB()

model.fit(X_tr, labels_tr)

model.score(X_te, labels_te)

5d6d197e165cfc854ba9f140c6f12cd6.gif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值