机械学习与R语言--Naive Bayes 朴素贝叶斯在R语言中的实现

本文介绍了如何使用R语言实现朴素贝叶斯算法进行短信分类,以区分垃圾短信和正常短信。通过清洗数据、构建稀疏矩阵、训练模型,最终达到了较高的预测准确率,但在模型优化过程中探讨了laplace参数的影响。
摘要由CSDN通过智能技术生成

为什么天气预报说70%概率下雨?为什么垃圾短信垃圾邮件被自动归类?这一切的基础算法便是朴素贝叶斯理论(算法有很多,这仅是其中之一)。

1.由贝叶斯理论到朴素贝叶斯(naive bayes)

理论的基础我就不讲了,我讲一下两个理论的区别。原本贝叶斯理论用来处理上述事件是很好的,但是由于贝叶斯理论在计算条件概率时,即在B发生的情况下A发生的概率,并不能简单的等同于A的概率而是p\left ( A| B \right )= p(A\bigcap B)/P(B) . 除非A B互为独立事件,才能直接等于P(A)。 如果我们直接把这个理论应用在R里面,似乎没啥问题。但是如果并不是简单的AB两个事件,而是ABCD...E+++这会导致算法量激增而计算机负担加重。通过实践认知,即使贝叶斯理论的独立假设被违背时,朴素贝叶斯还是很容易生效的,因此,为了简便,相比于贝叶斯理论,我们有很大倾向性使用朴素贝叶斯.

2.导入数据

我们以 sms_spam.csv 为例子,这是一个短信的例子,每天我们的手机都会收到各式各样的短信,有一些是朋友发来的,也有所谓的‘垃圾短信’,其中包含着广告,推销之类的主题。 垃圾短信是否拥有什么共同的特质,如包含链接?或者是 包含某些特征词(free, congratulations...) , 我们相信,同一类事务会拥有某个或者某些可以被发现的特征。 应运而生,我们有发现这些特征并评价这些特征的算法产生, NAIVE BAYES 便是其中之一。

# read the sms data into the sms data frame

sms_raw <- read.csv("sms_spam.csv", stringsAsFactors = FALSE,encoding='UTF-8')

# convert spam/ham to factor.
sms_raw$type <- as.factor(sms_raw$type)

# examine the type variable more carefully
str(sms_raw$type)
 #Factor w/ 3 levels "All done, all handed in. Don't know if mega shop in asda counts as celebration but thats what i'm doing!",..: 2 2 2 3 3 2 2 2 3 2 ...

table(sms_raw$type)

在 sms_spam.csv 中,我们可以看到数据大概是这样子的(实际上你应该在读入R之前就先打开excel看看数据)

这是一个非常简单的数据,2个Variables,Type应该由ham和spam组成。但是仔细观察str(sms_raw$text)的结果,你会发现levels是3(想想,这是不合理的,数据集我是从guthub上直接保存下来的)。进一步,我们看看问题出在哪里?

> summary(sms_raw)
                                                                                                       type     
 All done, all handed in. Don't know if mega shop in asda counts as celebration but thats what i'm doing!:   1  
 ham                                                                                                     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值