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

探索准备数据
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

你可能感兴趣的:(机器学习)