朴素贝叶斯分类之垃圾短信识别_光环大数据培训机构
- 格式:pdf
- 大小:294.95 KB
- 文档页数:11
如何利用机器学习算法实现人工智能技术的垃圾邮件识别与阻止垃圾邮件识别与阻止是人工智能技术的一个重要应用领域。
随着互联网的普及和信息技术的发展,垃圾邮件成为了人们日常生活中的一个困扰。
传统的过滤方法已经无法满足对垃圾邮件的准确识别和有效阻止的需求,而机器学习算法的出现为解决这一问题提供了新的思路和方法。
在机器学习算法中,朴素贝叶斯分类器是一种常用的垃圾邮件识别方法。
它基于贝叶斯定理,通过计算邮件中出现某个词语的概率来判断邮件的分类。
具体来说,朴素贝叶斯分类器将每个词语出现的概率视为独立事件,忽略了词语之间的相关性,从而简化了计算过程。
通过训练一组已知分类的邮件样本,朴素贝叶斯分类器能够学习到不同词语出现的概率分布,并根据这些概率进行分类判断。
然而,朴素贝叶斯分类器也存在一些问题。
首先,它无法考虑词语之间的语义关系,只是简单地计算词语的出现概率。
这就导致了在某些情况下,一些常用的词语可能被错误地判断为垃圾邮件的特征词。
其次,朴素贝叶斯分类器需要大量的训练样本来进行学习,而在实际应用中,获取大量准确标注的样本是一项困难的任务。
为了解决这些问题,研究人员提出了一些改进的机器学习算法。
例如,支持向量机(SVM)算法通过构建一个高维的特征空间,将样本映射到这个空间中,并在其中找到一个最优的超平面来进行分类。
SVM算法可以有效地处理高维数据,提高了垃圾邮件分类的准确性。
此外,随着深度学习算法的兴起,神经网络模型也被应用于垃圾邮件识别中。
深度学习模型可以通过多层次的神经网络结构来学习更加复杂的特征表示,从而提高分类的准确性。
除了机器学习算法,还有一些其他的技术手段可以用于垃圾邮件的识别与阻止。
例如,基于规则的方法可以通过设定一系列规则来判断邮件是否为垃圾邮件。
这些规则可以包括特定的词语、邮件的发送者、邮件的主题等等。
基于规则的方法可以快速判断邮件的分类,但是在面对新的垃圾邮件形式时,需要不断更新规则,才能保持有效性。
朴素贝叶斯分类之垃圾短信识别_光环大数据培训机构算法思想该算法根据训练数据集的取值计算已知分类的各种概率,在完成学习的过程后,如果将一个未分类的样本带入到算法中,分类器根据样本的特征计算概率并将其判为应该属于的类。
贝叶斯条件概率上文中提到的概率都是基于贝叶斯条件概率公式计算所得,具体公式如下:该公式表示,已知事件B发生的条件下,事件A发生的概率。
举个例子说,已知某人吸烟的情况下,其可能得肺癌的概率就可以根据该公式计算所得。
这里需要注意的是,贝叶斯条件概率计算的是某事件发生的概率,所以对原始数据有一个潜在的假设,即变量值尽可能的离散化(成为独立的事件),如果变量值是大量的连续数据,算法可能得到不理想的分类结果。
应用–垃圾短信识别接下来将使用该算法实现垃圾短信的识别,垃圾短信的识别又将涉及到文本文字的处理,数据来源于http://www.dt.fee.unicamp.br/~tiago/smsspamcollection/。
一、读取数据sms_rawdata <- read.csv(file = file.choose(), header = TRUE, stringsAsFactors = FALSE)#查看数据前6行head(sms_rawdata)#查看数据概要str(sms_rawdata)由于短信的类型是分类变量,这里进一步将其处理为因子sms_rawdata$type <- factor(sms_rawdata$type)#查看短信类型的数量table(sms_rawdata$type)prop.table(table(sms_rawdata$type))垃圾短信有747条,占了13.4%的比重。
二、文本处理在文本分析之前需要使用tm包将文本处理干净,主要是文本信息中含有的一些没有意义的内容,如标点符号、数字、停止词等。
#下载并加载tm包if(!suppressWarnings(require('tm'))){install.packages('tm')require('tm')}#首先将文本数据导入为语料库(Corpus函数)sms_corpus <- Corpus(VectorSource(sms_rawdata$text))#查看语料库sms_corpus发现语料库中包含5558个文件即短信。
借助朴素贝叶斯算法进行垃圾邮件过滤朴素贝叶斯算法是机器学习领域中的一种经典算法,广泛应用于文本分类、垃圾邮件过滤等问题。
垃圾邮件过滤是指对收到的邮件进行判断,识别出哪些邮件是垃圾邮件,哪些是正常邮件,从而避免用户收到过多的垃圾邮件。
通过借助朴素贝叶斯算法实现垃圾邮件过滤,可以提高邮件的过滤效率,同时也可以避免用户负担过重。
本文将从理论和实践两个方面,探讨借助朴素贝叶斯算法进行垃圾邮件过滤的原理、过程及效果。
一、朴素贝叶斯算法的原理朴素贝叶斯算法是一种基于贝叶斯定理的算法,其基本思想是,通过计算一封邮件中出现某些关键词的概率,来计算其属于某一类邮件的概率。
具体来说,朴素贝叶斯算法假设各个特征之间相互独立,即邮件中出现某个关键词的概率与邮件中出现其它关键词无关。
这一假设简化了计算过程,同时也使得算法的应用更为广泛。
朴素贝叶斯算法的计算过程可以用一个简单的例子来进行说明。
假设我们有两种水果:苹果和橙子,它们分别有不同的特征值,如红色、圆形、甜味等。
现在我们要判断一种水果是苹果还是橙子,可以基于朴素贝叶斯算法进行计算。
首先,我们需要确定每个特征值在苹果和橙子中出现的概率。
例如,苹果中出现红色的概率为0.8,出现圆形的概率为0.9,出现甜味的概率为0.6,而橙子中出现红色的概率为0.2,出现圆形的概率为0.7,出现甜味的概率为0.8。
然后,我们需要计算一个水果同时具有这些特征值的概率,该概率可以通过将每个特征值的概率相乘得到。
例如,如果这个水果是红色的、圆形的、有甜味的,那么它是苹果的概率为:P(苹果|红色,圆形,甜味) = P(红色|苹果) × P(圆形|苹果) × P(甜味|苹果) × P(苹果)其中,P(红色|苹果)表示苹果中红色出现的概率,P(苹果)表示苹果本身出现的概率,这些概率可以从训练数据中获得。
同样的,我们也可以计算出这个水果是橙子的概率,从而确定它是苹果还是橙子。
机器学习实训实验报告(四)专业班级学号姓名实验项目名称:利用朴素贝叶斯过滤垃圾邮件实验内容:1、了解概率分类器的意义,理解条件概率的计算方法2、了解朴素贝叶斯的理论知识,了解基于以上理论知识构建分类器的方法3、根据朴素贝叶斯的一般步骤进行过滤垃圾邮件的任务实验过程:算法分析:简介:朴素贝叶斯算法的分类模型是基于Bayes定理的,下面就简单介绍一下Bayes定理.设X为一个类别未知的数据样本,H为某个假设,C表示类别集合,若数据样本X属于一个特定的类别c,那么分类问题就是决定P(H/X),即在获得数据样本X时,H假设成立的概率.由于P(H),P(X), P(X/H)的概率值可以从(供学习使用的)数据集合中得到,Bayes 定理描述了如何根据P(H), P(X),P(X/H)计算获得的P(H/X),有关的具体公式定义描述如下算法过程:我们假设训练集为m个样本n个维度,如下:(x(1)1,x(1)2,...x(1)n,y1),(x(2)1,x(2 )2,...x(2)n,y2),...(x(m)1,x(m)2,...x( m)n,ym)(x1(1),x2(1),...xn(1),y1),( x1(2),x2(2),...xn(2),y2),...(x1(m),x 2(m),...xn(m),ym)共有K个特征输出类别,分别为C1,C2,...,CKC1,C2,...,CK,每个特征输出类别的样本个数为m1,m2,...,mKm1,m2,...,mK,在第k 个类别中,如果是离散特征,则特征XjXj各个类别取值为mjlmjl。
其中l取值为源程序代码:from numpy import *import redef loadDataSet():#文档集合postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],['stop', 'posting', 'stupid', 'worthless', 'garbage'],['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]classV ec = [0,1,0,1,0,1] #类别:1代表侮辱性文字,0代表正常return postingList,classVec#函数说明:将切分的词条整理成不重复的词条列表def createV ocabList(dataSet):vocabSet = set([]) ##创建一个空的不重复列表for document in dataSet:vocabSet = vocabSet | set(document) #取并集return list(vocabSet)#函数说明:根据vocabList,将inputSet向量化,每个元素为1或0 def setOfWords2Vec(vocabList, inputSet):returnVec = [0]*len(vocabList) #创建一个其中所含元素都为0的向量for word in inputSet: #遍历每个词条if word in vocabList: #如果词条存在于词汇表中,则置1returnVec[vocabList.index(word)] = 1else: print ("the word: %s is not in my Vocabulary!" % word)return returnVec#函数说明:朴素贝叶斯分类器训练函数def trainNB0(trainMatrix,trainCategory):numTrainDocs = len(trainMatrix) #计算训练的文档数目numWords = len(trainMatrix[0]) #计算每篇文档的词条数1,2,...Sj1,2,...Sj,SjSj为特征j不同的取值数。
朴素贝叶斯算法在垃圾邮件过滤中的应用技巧随着互联网的普及和信息技术的快速发展,垃圾邮件问题成为了一个严重的挑战。
针对垃圾邮件的过滤工作变得越来越重要,因为它能够提高人们的工作效率并减少不必要的干扰。
朴素贝叶斯算法是解决垃圾邮件过滤问题的一种有效方法,它基于概率模型,并且具有简洁、高效的特点。
本文将介绍朴素贝叶斯算法在垃圾邮件过滤中的应用技巧,包括特征选择、训练集构建以及模型评估等方面。
首先,特征选择是提高朴素贝叶斯算法在垃圾邮件过滤中准确性的关键。
在邮件中,可以利用各种特征进行分类,如发件人、主题、内容、附件等。
选择适合的特征可以提高分类的精度。
常见的特征选择方法有信息增益、卡方检验和互信息等。
其中,信息增益方法通过计算特征对分类的贡献度来进行选择,在计算过程中将使用信息熵作为度量。
卡方检验则是用来衡量特征和分类之间的相关性,通过选择卡方值较高的特征进行分类。
互信息方法则是通过计算特征与分类之间的互信息来进行选择。
根据实际情况选择适用的特征选择方法,可以提高算法的性能。
其次,训练集的构建对朴素贝叶斯算法在垃圾邮件过滤中的准确性也具有重要影响。
训练集应该包含大量的垃圾邮件和正常邮件,并且需要覆盖到可能遇到的各种情况。
常见的构建训练集的方法有手工标注和主动学习。
手工标注是指人工对已有邮件进行分类,并将分类结果作为训练集。
这种方法的优点是简单易行,但是耗时耗力。
主动学习则是利用算法自动从未分类的邮件中选择一部分特殊样本,请求专家进行标注,并根据标注结果调整模型,然后继续选择新的样本再次请求标注。
主动学习的优点是减轻人工标注的负担,提高分类器的准确性。
选择合适的训练集构建方法可以使模型更好地适应实际情况,提高过滤效果。
最后,模型评估是衡量朴素贝叶斯算法在垃圾邮件过滤中效果的重要指标。
常见的模型评估方法有精确率、召回率和F1值等。
精确率是指分类器将垃圾邮件判定为垃圾邮件的正确率。
召回率是指分类器对所有垃圾邮件的正确率。
朴素贝叶斯在垃圾邮件过滤中的应用一、引言随着互联网的普及和电子邮件的广泛使用,垃圾邮件成为了一个让人头疼的问题。
每天我们都会收到大量的电子邮件,其中大部分都是垃圾邮件,给我们的工作和生活带来了不少麻烦。
为了解决这一问题,人们提出了各种各样的方法,其中朴素贝叶斯算法在垃圾邮件过滤中得到了广泛的应用。
二、朴素贝叶斯算法的原理朴素贝叶斯算法是一种基于概率统计的分类算法。
它基于贝叶斯定理,利用已知的数据来对未知的数据进行分类。
具体来说,朴素贝叶斯算法假设各个特征之间相互独立,然后根据先验概率和条件概率来计算后验概率,从而确定数据的分类。
在垃圾邮件过滤中,朴素贝叶斯算法可以根据邮件的内容和发件人等特征来判断邮件是否是垃圾邮件。
三、朴素贝叶斯算法在垃圾邮件过滤中的应用1. 特征提取在使用朴素贝叶斯算法进行垃圾邮件过滤时,首先需要对邮件进行特征提取。
常见的特征包括邮件的主题、发件人、内容中出现的关键词等。
这些特征可以通过文本处理和自然语言处理技术来提取,然后转化为向量形式,以便进行后续的分类处理。
2. 模型训练通过使用已有的带标签的邮件数据集,我们可以利用朴素贝叶斯算法来训练模型。
在训练过程中,我们需要计算每个特征对于分类的条件概率,并且考虑未知邮件的先验概率。
通过大量的训练数据,模型可以不断地优化自身的参数,从而提高分类的准确性。
3. 分类预测当模型训练完成后,我们可以将新的邮件数据输入到模型中进行分类预测。
模型会根据所输入的特征向量,计算出邮件属于垃圾邮件和非垃圾邮件的概率,并选择概率较大的类别作为最终的分类结果。
四、朴素贝叶斯算法在垃圾邮件过滤中的优势1. 高效性朴素贝叶斯算法在垃圾邮件过滤中具有高效性,其分类速度快,适合处理大量的邮件数据。
这使得我们可以在较短的时间内对大量的邮件进行分类,提高了工作效率。
2. 准确性通过合适的特征提取和模型训练,朴素贝叶斯算法在垃圾邮件过滤中可以取得较高的分类准确性。
朴素贝叶斯法_光环大数据培训朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。
训练的时候,学习输入输出的联合概率分布;分类的时候,利用贝叶斯定理计算后验概率最大的输出。
朴素贝叶斯法的学习与分类基本方法设输入空间为n维向量的集合,输出空间为类标记集合={c1……ck}。
输入特征向量x和输出类标记y分属于这两个集合。
X是输入空间上的随机变量,Y是输出空间上的随机变量。
P(X,Y)是X和Y的联合概率分布,训练数据集由P(X,Y)独立同分布产生。
朴素贝叶斯法通过T学习联合概率分布P(X,Y)。
具体来讲,学习以下先验概率:以及条件概率分布:于是根据联合概率分布密度函数:学习到联合概率分布P(X,Y)。
而条件概率分布的参数数量是指数级的,也就是X和Y的组合很多,假设xj可能取值Sj个,Y可能取值有K个,那么参数的个数是。
特别地,取xj=S,那么参数个数为KSn,当维数n很大的时候,就会发生维数灾难。
一维空间中,把一个单位空间(退化为区间)以每个点距离不超过0.01采样,需要102个平均分布的采样点,而在10维度空间中,需要1020个点才行。
计算方式用Python描述如下:dimensionality = 10print 1 / (0.01 ** dimensionality)也可以如下可视化:# -*- coding:utf-8 -*-# Filename: dimensionality.py# Author:hankcs# Date: 2015/2/6 14:40from matplotlib import pyplot as pltimport numpy as npmax_dimensionality = 10max_dimensionality)))x = np.linspace(0, max_dimensionality, 1000)y = 1 / (0.01 ** x)plt.plot(x, y, lw=2)plt.show()可视化图像:这种指数级的复杂度增长被称为维数灾难。
基于朴素贝叶斯的垃圾短信过滤技术研究近年来,短信垃圾问题成为了人们在日常生活中不得不面对的一个难题。
众所周知,垃圾短信巨大的数量和接收频率,不仅占用了用户宝贵的通讯时空,还存在一定的安全和欺诈风险,给用户带来了不少困扰和不必要的财产、个人信息损失。
因此,如何快速准确地识别垃圾短信,保障用户的权益,一直是研究者关注的热点问题之一。
随着机器学习技术的发展,越来越多的学者将目光投向了利用朴素贝叶斯算法进行垃圾短信分类的研究。
朴素贝叶斯是一种基于概率统计分类算法,原理简单易懂,分类准确率高,尤其适用于大规模数据集快速分类的场景,因此得以广泛应用于垃圾短信过滤领域。
那么朴素贝叶斯算法是如何实现的呢?首先,需要有一批已知的垃圾短信和普通短信的样本作为数据集,通过对这些数据进行实验和统计,计算出每一个特征条件下垃圾短信与普通短信的概率。
这些特征条件包括短信的关键词、短信的发送者、短信的发送时间等等。
在得到训练样本数据集中每一个特征条件下垃圾短信和普通短信的概率之后,就可以根据贝叶斯公式通过先验概率和条件概率计算出一个未知短信是垃圾短信或普通短信的后验概率,从而实现垃圾短信的分类。
具体而言,朴素贝叶斯算法在进行垃圾短信分类时会将每个短信看成由若干特征条件所组成的向量,这些特征条件对应向量的每个维度,向量中每个维度对应的值则为该特征条件出现的频率或概率。
将这些向量输入到贝叶斯公式中,根据各特征条件对应的概率,朴素贝叶斯算法会计算出每个短信属于垃圾短信和普通短信的后验概率,最终将后验概率大于某个阈值的短信认为是垃圾短信,否则为普通短信。
虽然朴素贝叶斯算法是一种高效准确的分类算法,但其对于数据集的质量和短信特征条件的选择十分敏感。
如果训练样本数据集的质量较差,特征条件选择不当,都会导致分类模型准确率下降。
因此,在选择样本数据集时,需要保证样本的真实性、严谨性和完整性,并对特征条件进行有效筛选和优化;同时,为了提升模型的鲁棒性和准确性,可以考虑采用其他方法对模型进行进一步训练和优化,比如增加样本数据量、引入特征权重、考虑时间序列等等。
基于朴素贝叶斯的中文垃圾短信过滤系统的设计作者:牟肖光宫丽宁来源:《电脑知识与技术·学术交流》2008年第32期摘要:在传统垃圾短信过滤系统基础上引入了中文分词算法和朴素贝叶斯算法,使其具有了自学习能力,克服了传统垃圾短信系统需要人工设置、无法适应短信内容变化、误判率高的缺点。
实践证明该短信过滤系统具有较高的准确率和适应力。
关键词:朴素贝叶斯;垃圾短信;短信过滤中图分类号:TP302文献标识码:A文章编号:1009-3044(2008)32-1178-03Design of Chinese SMS Spam Filtering System Based on the Naive BayesMOU Xiao-guang1, GONG Li-ning2(1.Library, Qingdao Agricultural University, Qingdao 266109, China; work Center, Qingdao Agricultural University, Qingdao 266109, China)Abstract: The Chinese word segmentation algorithm and the Naive Bayes algorithm are introduced into the tradition of SMS spam filtering system, it has a self-learning ability to overcome the defects of artificial setup of traditional spam SMS system , impossible adaptability to the changes in the content of the SMS and the high rate of miscarriage of justice. Practice has proved that the message filtering system has high accuracy and adaptability.Key words: naive bayes; SMS spam; SMS filtering1 引言手机短信以其“短、快、新、奇”的模式已经成为人们一种非常重要的通讯方式,然而我们在享受短信给我们带来的便捷的同时,也不得不面对垃圾短信骚扰的无奈。
十大经典算法朴素贝叶斯全解朴素贝叶斯算法(Naive Bayes)是一种简单但经典的机器学习算法,广泛应用于文本分类、垃圾邮件过滤、情感分析等领域。
它基于贝叶斯定理,通过计算先验概率和条件概率来进行分类。
下面将对朴素贝叶斯算法进行全面解析。
一、朴素贝叶斯算法的原理朴素贝叶斯算法的核心思想是基于贝叶斯定理,它假设所有特征之间相互独立,即“朴素”的概念。
根据贝叶斯定理,可以将分类问题转化为概率问题,即给定特征条件下,求解后验概率最大的类别。
1.先验概率先验概率是指在没有任何信息的情况下,目标变量的概率分布。
在朴素贝叶斯算法中,先验概率可以通过目标变量的频率进行估计。
2.条件概率条件概率是指在已知其中一事件发生的情况下,另一事件发生的概率。
在朴素贝叶斯算法中,条件概率可以通过计算特征与目标变量之间的联合概率来估计。
3.后验概率后验概率是指在已知特征条件下,目标变量的概率分布。
朴素贝叶斯算法通过计算后验概率来进行分类。
二、朴素贝叶斯算法的步骤朴素贝叶斯算法的步骤如下:1.数据预处理对原始数据进行清洗、分词、去除停用词等预处理操作。
2.提取特征根据问题的特点,选择合适的特征进行提取。
常用的特征包括词频、TF-IDF等。
3.建立模型并学习根据训练集的特征和对应的分类结果,计算先验概率和条件概率。
朴素贝叶斯算法假设特征之间相互独立,因此可以分别计算每个特征对应每个分类的条件概率。
4.预测分类对于给定的测试样本,根据求得的条件概率和先验概率,计算后验概率,并选择概率最大的分类作为预测结果。
5.评估模型性能通过对比预测结果与真实结果,计算准确率、召回率、F1值等指标来评估模型的性能。
三、朴素贝叶斯算法的优缺点朴素贝叶斯算法有以下优点:1.算法简单,实现容易。
2.适用于大规模数据集。
3.对缺失数据的处理比较鲁棒。
4.对于高维数据集表现良好。
但朴素贝叶斯算法也存在一些缺点:1.假设特征之间相互独立,这在一些情况下可能不成立,导致分类效果不佳。
朴素贝叶斯分类之垃圾短信识别_光环大数据培训机构
算法思想
该算法根据训练数据集的取值计算已知分类的各种概率,在完成学习的过程后,如果将一个未分类的样本带入到算法中,分类器根据样本的特征计算概率并将其判为应该属于的类。
贝叶斯条件概率
上文中提到的概率都是基于贝叶斯条件概率公式计算所得,具体公式如下:
该公式表示,已知事件B发生的条件下,事件A发生的概率。
举个例子说,已知某人吸烟的情况下,其可能得肺癌的概率就可以根据该公式计算所得。
这里需要注意的是,贝叶斯条件概率计算的是某事件发生的概率,所以对原始数据有一个潜在的假设,即变量值尽可能的离散化(成为独立的事件),如果变量值是大量的连续数据,算法可能得到不理想的分类结果。
应用–垃圾短信识别
接下来将使用该算法实现垃圾短信的识别,垃圾短信的识别又将涉及到文本
文字的处理,数据来源于http://www.dt.fee.unicamp.br/~tiago/smsspamcollection/。
一、读取数据
sms_rawdata <- read.csv(file = file.choose(), header = TRUE, stringsAsFactors = FALSE)
#查看数据前6行
head(sms_rawdata)
#查看数据概要
str(sms_rawdata)
由于短信的类型是分类变量,这里进一步将其处理为因子
sms_rawdata$type <- factor(sms_rawdata$type)
#查看短信类型的数量
table(sms_rawdata$type)
prop.table(table(sms_rawdata$type))
垃圾短信有747条,占了13.4%的比重。
二、文本处理
在文本分析之前需要使用tm包将文本处理干净,主要是文本信息中含有的一些没有意义的内容,如标点符号、数字、停止词等。
#下载并加载tm包
if(!suppressWarnings(require('tm'))){
install.packages('tm')
require('tm')
}
#首先将文本数据导入为语料库(Corpus函数)
sms_corpus <- Corpus(VectorSource(sms_rawdata$text))
#查看语料库
sms_corpus
发现语料库中包含5558个文件即短信。
使用tm_map函数将没有意义的信息剔除
#所有单词转化为小写
sms_clean <- tm_map(sms_corpus,content_transformer(tolower)) #剔除所有标点符号
sms_clean <- tm_map(sms_clean,removePunctuation)
#剔除所有数字
sms_clean <- tm_map(sms_clean,removeNumbers)
#剔除所有停止词,如a/the等,使用tm包自带的停止词
sms_clean <- tm_map(sms_clean,removeWords,stopwords())
#剔除所有空格
sms_clean <- tm_map(sms_clean,stripWhitespace)
创建符合贝叶斯算法的数据集(文档词条矩阵),矩阵的行表示短信条数,矩阵的列表示单词。
sms_dtm <- DocumentTermMatrix(x = sms_clean)
sms_dtm
该文档词条矩阵包含了8300多列,超过了短信的条数,这将导致算法无法准确分类,为了减少矩阵的列数,我们将剔除同一个单词出现在少于5条短信的单词。
这里的5表示总短信条数的0.1%。
#将文档词条矩阵转化为数据框
sms_dtm2 <- as.data.frame(inspect(sms_dtm))
sms_dtm2 <- sms_dtm2[,findFreqTerms(sms_dtm,5)]
dim(sms_dtm2)
[1] 5558 1542
#现在还剩1542列
三、文本探索
在建模之前,我们对文本进行一个初步的探索–词云
#下载并加载wordcloud包
if(!suppressWarnings(require('wordcloud'))){
install.packages('wordcloud')
require('wordcloud')
}
#绘制文字云
par(bg='black')
wordcloud(words = sms_clean, min.freq = 50, scale = c(2.5,0.5),colors=rainbow(10))
四、建模
由于文档词条矩阵中的数值表示某个单词出现在一条短信中的次数,所以需要将连续数值离散化,这里将大于等于1的值用YES表示,否则用NO表示。
#构建离散化的自定义函数
numtochar <- function(x){
ifelse(x >= 1, 'YES', 'NO')
}
#将自定义函数应用到数据框中的每一列
sms_dtm2 <- sapply(sms_dtm2, numtochar)
#创建训练集和测试集
set.seed(1234)
index <- sample(1:2, size = nrow(sms_rawdata), replace = TRUE, prob = c(0.7,0.3))
train_data <- sms_dtm2[index == 1,]
train_Y <- sms_rawdata[index == 1, 1]
test_data <- sms_dtm2[index == 2,]
test_Y <- sms_rawdata[index == 2, 1]
五、函数简介
接下来使用klaR包中的NaiveBayes()函数实现贝叶斯分类算法,NaiveBayes()函数的语法和参数如下:
NaiveBayes(formula, data, …, subset, na.action = na.pass)
NaiveBayes(x, grouping, prior, usekernel = FALSE, fL = 0, …)
formula指定参与模型计算的变量,以公式形式给出,类似于y=x1+x2+x3;
data用于指定需要分析的数据对象;
na.action指定缺失值的处理方法,默认情况下不将缺失值纳入模型计算,也不会发生报错信息,当设为“na.omit”时则会删除含有缺失值的样本;
x指定需要处理的数据,可以是数据框形式,也可以是矩阵形式;
grouping为每个观测样本指定所属类别;
prior可为各个类别指定先验概率,默认情况下用各个类别的样本比例作为先验概率;
usekernel指定密度估计的方法(在无法判断数据的分布时,采用密度密度估计方法),默认情况下使用标准的密度估计,设为TRUE时,则使用核密度估计方法;
fL指定是否进行拉普拉斯修正,默认情况下不对数据进行修正,当数据量较小时,可以设置该参数为1,即进行拉普拉斯修正。
#下载并加载klaR包
if(!suppressWarnings(require('klaR'))){
install.packages('klaR')
require('klaR')
}
#使用训练集建模
model <- NaiveBayes(x = train_data, grouping = train_Y, fL = 1) #使用测试集对模型的准确性进行鉴定
pre <- predict(model, newdata = test_data)
Freq <- table(pre$class, test_Y)
Freq
accuracy <- sum(diag(Freq))/sum(Freq)
accuracy
模型的准确率近98%。
本文不足之处主要是没能够使用中文短信作为案例,如果条件允许,能够搜集到大量的中文短信或邮件,我还是想再走一遍流程。
关于中文文本的分析,会多一个分词的步骤,其余基本上和英文文本分析步骤一致。
为什么大家选择光环大数据!
大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请大数据领域具有多年经验的讲师,提高教学的整体质量与教学水准。
讲师团及时掌握时代的技术,将时新的技能融入教学中,让学生所学知识顺应时代所需。
通过深入浅出、通俗易懂的教学方式,指导学生较快的掌握技能知识,帮助莘莘学子实现就业梦想。
光环大数据--大数据培训&人工智能培训
光环大数据启动了推进人工智能人才发展的“AI智客计划”。
光环大数据专注国内大数据和人工智能培训,将在人工智能和大数据领域深度合作。
未来三年,光环大数据将联合国内百所大学,通过“AI智客计划”,共同推动人工智能产业人才生态建设,培养和认证5-10万名AI大数据领域的人才。
参加“AI智客计划”,享2000元助学金!
【报名方式、详情咨询】
光环大数据网站报名:
手机报名链接:http:// /mobile/
光环大数据。