基于朴素贝叶斯判断垃圾短信

探索准备数据
sms_raw <- read.csv("path", stringsAsFactors = FALSE)

sms_raw$type <- factor(sms_raw$type, levels=c("ham", "spam")

处理和分析文本数据
sms_corpus <- Corpus(VectorSource(sms_raw$text))    //生成语料库

corpus_clean <- tm_map(corpus_clean, tolower)
corpus_clean <- tm_map(corpus_clean, removeNumbers)
corpus_clean <- tm_map(corpus_clean, removeWrods, stopWords())
corpus_clean <- tm_map(corpus_clean, removePunctuation)
corpus_clean <- tm_map(corpus_clean, stripWhitespace)

sms_dtm <- DocumentTermMatrix(corpus_clean)    //生成稀疏矩阵-文档单词矩阵

建立训练数据集和测试数据集【25%, 75%】
sms_raw_train <- sms_raw[1:4169, ]
sms_raw_test <- sms_raw[4170:5559, ]

sms_dtm_train <- sms_dtm[1:4169, ]
sms_dtm_test <- sms_dtm[4170:5559, ]

sms_corpus_train <- corpus_clean[1:4169, ]
sms_corpus_test <-   corpus_clean[4170:5559, ]

为频繁出现的单词创建指示特征
sms_freq_terms_list <- list(findFreqTerms(sms_dtm_train, 5))
sms_train <- DocumentTermMatrix(sms_corpus_train, sms_freq_terms_list)
sms_test <- DocumentTermMatrix(sms_corpus_test, sms_freq_terms_list)

将文档单词矩阵中的次数转换为“yes”or“no”的因子变量
原因:朴素贝叶斯分类器通常是训练具有明确特征的数据
convert_counts <- function(x) {
+ x <- ifelse(x>0, 1, 0)
+ x <- factor(x, levels=c(0,1), labels=c("no", "yes"))
+ return(x)
+ }
sms_train <- apply(sms_train, MARGIN=2, convert_counts)
sms_test <- apply(sms_test, MARGIN=2, convert_counts)

基于数据训练模型并测试
sms_classifier <- naiveBayes(sms_train, sms_raw_train$type)
sms_test_pred <- predict(sms_classifier, sms_test)

评估性能
library(gmodels)
> CrossTable(sms_test_pred, sms_raw_test$type, 
+ prop.chisq = FALSE, prop.t = FALSE,

+ dnn = c('predicted', 'actual'))


Hadoop大数据云计算技术群: 342391093

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值