机器学习与R语言:NB

#----------------------------------------
# 功能描述:演示NB建模过程
# 数据集:SMS文本信息
# tm包:维也纳财经大学提供
#----------------------------------------

#第一步:收集数据
# import the CSV file
sms_raw <- read.csv("/Users/chenyangang/R语言/data/sms_spam.csv", stringsAsFactors = FALSE)

#第二步:探索和准备数据
# 分类变量因子化 spam/ham
sms_raw$type <- factor(sms_raw$type)

# 加载文本挖掘包
library(tm)

#创建语料库
sms_corpus <- Corpus(VectorSource(sms_raw$text))

#查看数据
print(sms_corpus)
inspect(sms_corpus[1:3])

#新增停用词
stopwordVector <- c("supplier","order")

# clean up the corpus using tm_map()
corpus_clean <- tm_map(sms_corpus, tolower)
corpus_clean <- tm_map(corpus_clean, removeNumbers)
corpus_clean <- tm_map(corpus_clean, removeWords, stopwords())
corpus_clean <- tm_map(corpus_clean, removePunctuation)
corpus_clean <- tm_map(corpus_clean, stripWhitespace)

#去掉新增停用词
corpus_clean <- tm_map(corpus_clean, removeWords, stopwordVector)

#PlainTextDocument 对象,最后处理
corpus_plain <- tm_map(corpus_clean, PlainTextDocument)

# 创建稀疏矩阵
sms_dtm <- DocumentTermMatrix(corpus_plain,control = list())

# 创建测试数据集和训练数据集
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_plain[1:4169]
sms_corpus_test  <- corpus_plain[4170:5559]

# 查看训练数据集和测试数据集中的占比
prop.table(table(sms_raw_train$type))
prop.table(table(sms_raw_test$type))

#加载词云包
library(wordcloud)

#这里最好用有区分的颜色,RColorBrewer中的Dark2和Set1推荐使用
pal2 <- brewer.pal(8,"Dark2")
wordcloud(corpus_plain, scale=c(3, 0.5),min.freq=10, min.words = 10, random.order=FALSE, rot.per=.15, colors=pal2)
wordcloud(sms_corpus_train, min.freq = 40, random.order = FALSE, rot.per=.15, colors=pal2)

# 训练数据区分垃圾邮件和非垃圾邮件
spam <- subset(sms_raw_train, type == "spam")
ham  <- subset(sms_raw_train, type == "ham")

#分别查看垃圾邮件和非垃圾邮件词云图,如果需要保存图片采用png方法
#--png(file = "/Users/chenyangang/01.png", bg = "transparent")
#--dev.off()

wordcloud(spam$text, max.words = 40, scale = c(3, 0.5), random.order = FALSE, rot.per=.15, colors=pal2)
wordcloud(ham$text, max.words = 40, scale = c(3, 0.5), random.order = FALSE, rot.per=.15, colors=pal2)

# 标示大于5次的关键词(为频繁出现的单词创建指示特征)
sms_term <- TermDocumentMatrix(sms_corpus,control = list(removePunctuation = TRUE,stopwords = TRUE))

#获取次数大于5次的词组成字典(未调通代码)
#sms_dict <- Dictionary(findFreqTerms(sms_dtm_train, 5))
#sms_list <- Terms(findFreqTerms(sms_term, 5))
sms_dict <- findFreqTerms(sms_term, 5)

sms_train <- DocumentTermMatrix(sms_corpus_train, list(dictionary = sms_dict))
sms_test  <- DocumentTermMatrix(sms_corpus_test, list(dictionary = sms_dict))

# 转换为因子变量
convert_counts <- function(x) {
  x <- ifelse(x > 0, 1, 0)
  x <- factor(x, levels = c(0, 1), labels = c("No", "Yes"))
}

# 将训练数据和测试数据按列转换为因子变量
sms_train <- apply(sms_train, MARGIN = 2, convert_counts)
sms_test  <- apply(sms_test, MARGIN = 2, convert_counts)

## 第三步: 训练模型
#----------------------------------------------
#创建分类器:
#         m <- naiveBayes(train, class, laplace = 0)
#   train: 数据框或包含训练数据的矩阵
#   class: 包含训练数据的每一行的分类的一个因子向量
#   laplace: 控制拉普拉斯估计的一个数值(默认为0)
#   该函数返回一个朴素贝叶斯对象,该对象能够用于预测
#
#   进行预测:
#         p <- predict(m, test, type = "class")
#       m: 由naiveBayes(train, class, laplace = 0) 训练的模型对象
#       test:数据框或包含测试数据的矩阵,包含用来建立分类器的训练数据相同的特征
#       type:值为“class”或“raw”,标示预测是最可能的类别值或者原始的预测概率
#   该函数返回一个向量,根据参数type的值,该向量含有预测的类别值或者原始的预测概率
#   example:
#           sms_classifier <- naiveBayes(sms_train, sms_raw_train$type)
#           sms_test_pred <- predict(sms_classifier, sms_test)
#----------------------------------------------
library(e1071)
sms_classifier <- naiveBayes(sms_train, sms_raw_train$type)
sms_classifier

## 第四步: 评估模型性能
sms_test_pred <- predict(sms_classifier, sms_test)

library(gmodels)
CrossTable(sms_test_pred, sms_raw_test$type,
           prop.chisq = TRUE, prop.t = TRUE, prop.r = TRUE,
           dnn = c(‘predicted‘, ‘actual‘))

## 第五步: 提升模型性能(应用拉普拉斯估计:本质是给频率数的每个计数加上一个较小的数)
sms_classifier2 <- naiveBayes(sms_train, sms_raw_train$type, laplace = 1)
sms_test_pred2 <- predict(sms_classifier2, sms_test)
CrossTable(sms_test_pred2, sms_raw_test$type,
           prop.chisq = FALSE, prop.t = FALSE, prop.r = FALSE,
           dnn = c(‘predicted‘, ‘actual‘))

  

时间: 2024-10-06 00:04:29

机器学习与R语言:NB的相关文章

机器学习与R语言

此书网上有英文电子版:Machine Learning with R - Second Edition [eBook].pdf(附带源码) 评价本书:入门级的好书,介绍了多种机器学习方法,全部用R相关的包实现,案例十分详实,理论与实例结合. 目录 第一章 机器学习简介 第二章 数据的管理和理解 第三章 懒惰学习--使用近邻分类 第四章 概率学习--朴素贝叶斯分类 第五章 分而治之--应用决策树和规则进行分类 第六章 预测数值型数据--回归方法 第七章 黑箱方法--神经网络和支持向量机 第八章 探

机器学习:R语言中如何使用最小二乘法

详细内容见上一篇文章:http://www.cnblogs.com/lc1217/p/6514734.html 这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下:(数据同上一篇博客)(是不是很简单????) > x<-c(6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2) > y<-c(5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3) > lsfit(x,y

机器学习与R语言:kNN

#---------------------------------------- # 功能描述:演示kNN建模过程 # 数据集:威斯康星乳腺癌诊断 # #---------------------------------------- #第一步:收集数据 # import the CSV file wbcd <- read.csv("/Users/chenyangang/R语言/data/wisc_bc_data.csv", stringsAsFactors = FALSE)

机器学习与R语言:C5.0

#---------------------------------------- # 功能描述:演示C50建模过程 # 数据集:汉堡大学信贷模型,信贷数据 # #---------------------------------------- #第一步:收集数据 # import the CSV file credit <- read.csv("/Users/chenyangang/R语言/data/credit.csv", stringsAsFactors = TRUE) #

机器学习与R语言——基本语法

一.注释 1.选中要注释的内容,快捷键Ctrl+Shift+C(取消注释方法相同) 2.在需注释内容前输入# 1 #需注释的内容 3.利用if语句,将判断条件设置为false则可跳过if语句中的内容,相当于实现了内容的注释 1 if(false) 2 { 3 x = 5 4 y <- 10 5 } 二.工作成果保存.数据删除及加载 1..首先创建两文件夹,分别命名为Rsourse和Data,用于保存工程文件(.r)和数据文件(.rda) 2.相关函数: (1).获取当前工作路径:getwd()

简单线性回归问题的优化(SGD)R语言

本编博客继续分享简单的机器学习的R语言实现. 今天是关于简单的线性回归方程问题的优化问题 常用方法,我们会考虑随机梯度递降,好处是,我们不需要遍历数据集中的所有元素,这样可以大幅度的减少运算量. 具体的算法参考下面: 首先我们先定义我们需要的参数的Notation 上述算法中,为了避免过拟合,我们采用了L2的正则化,在更新步骤中,我们会发现,这个正则项目,对参数更新的影响 下面是代码部分: ## Load Library library(ggplot2) library(reshape2) li

R语言使用机器学习算法预测股票市场

quantmod 介绍 quantmod 是一个非常强大的金融分析报, 包含数据抓取,清洗,建模等等功能. 1. 获取数据 getSymbols 默认是数据源是yahoo 获取上交所股票为 getSymbols("600030.ss"), 深交所为 getSymbols("000002.sz").  ss表示上交所, sz表示深交所 2. 重命名函数 setSymbolLookup 3. 股息函数 getDividends 4. 除息调整函数 adjustOHLC

机器学习算法的R语言实现(二):决策树

1.介绍 ?决策树(decision tree)是一种有监督的机器学习算法,是一个分类算法.在给定训练集的条件下,生成一个自顶而下的决策树,树的根为起点,树的叶子为样本的分类,从根到叶子的路径就是一个样本进行分类的过程. ?下图为一个决策树的例子,见http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91 ? 可见,决策树上的判断节点是对某一个属性进行判断,生成的路径数量为该属性可能的取值,最终到叶子节点时,就完成一个分类(或预测).决策树

R语言︱机器学习模型评估方案(以随机森林算法为例)

R语言︱机器学习模型评估方案(以随机森林算法为例) 笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评价模型的方式. 常见的应用在监督学习算法中的是计算平均绝对误差(MAE).平均平方差(MSE).标准平均方差(NMSE)和均值等,这些指标计算简单.容易理解:而稍微复杂的情况下,更多地考虑的是一些高大上的指标,信息熵.复杂度和基尼值等等. 本篇可以用于情感挖