数据分析与挖掘 - R语言:贝叶斯分类算法(案例二)
接着案例一,我们再使用另一种方法实例一个案例
直接上代码:
#!/usr/bin/Rscript library(plyr)
library(reshape2) #1、根据训练集创建朴素贝叶斯分类器
#1.1、生成类别的概率 ##计算训练集合D中类别出现的概率,即P{c_i}
##输入:trainData 训练集,类型为数据框
## strClassName 指明训练集中名称为 strClassName列为分类结果
##输出:数据框,P{c_i}的集合,类别名称|概率(列名为 prob)
class_prob <- function(trainData, strClassName){
#训练集样本数
#nrow返回行数
length.train <- nrow(trainData)
dTemp <- ddply(trainData, strClassName, "nrow")
dTemp <- ddply(dTemp, strClassName, mutate, prob = nrow/length.train)
dTemp[,-2]
} ##1.2、生成每个类别下,特征取不同值的概率
##计算训练集合D中,生成每个类别下,特征取不同值的概率,即P{fi|c_i}
##输入:trainData 训练集,类型为数据框
## strClassName 指明训练集中名称为strClassName列为分类结果,其余的全部列认为是特征值
##输出:数据框,P{fi|c_i}的集合,类别名称|特征名称|特征取值|概率(列名为 prob)
feature_class_prob <- function(trainData, strClassName){
# 横表转换为纵表
data.melt <- melt(trainData,id=c(strClassName))
# 统计频数
aa <- ddply(data.melt, c(strClassName,"variable","value"), "nrow")
# 计算概率
bb <- ddply(aa, c(strClassName,"variable"), mutate, sum = sum(nrow), prob = nrow/sum)
# 增加列名
colnames(bb) <- c("class.name",
"feature.name",
"feature.value",
"feature.nrow",
"feature.sum",
"prob")
# 返回结果
bb[,c(1,2,3,6)]
} ## 以上创建完朴素贝叶斯分类器
## 2、使用生成的朴素贝叶斯分类器进行预测
##使用生成的朴素贝叶斯分类器进行预测P{fi|c_i}
##输入:oneObs 数据框,待预测的样本,格式为 特征名称|特征值
## pc 数据框,训练集合D中类别出现的概率,即P{c_i} 类别名称|概率
## pfc 数据框,每个类别下,特征取不同值的概率,即P{fi|c_i}
## 类别名称|特征名称|特征值|概率
##输出:数据框,待预测样本的分类对每个类别的概率,类别名称|后验概率(列名为 prob)
pre_class <- function(oneObs, pc,pfc){
colnames(oneObs) <- c("feature.name", "feature.value")
colnames(pc) <- c("class.name","prob")
colnames(pfc) <- c("class.name","feature.name","feature.value","prob") # 取出特征的取值的条件概率
feature.all <- join(oneObs,pfc,by=c("feature.name","feature.value"),type="inner")
# 取出特征取值的条件概率连乘
feature.prob <- ddply(feature.all,.(class.name),summarize,prob_fea=prod(prob)) #prod为连乘函数 #取出类别的概率
class.all <- join(feature.prob,pc,by="class.name",type="inner")
#输出结果
ddply(class.all,.(class.name),mutate,pre_prob=prob_fea*prob)[,c(1,4)]
} ##3、数据测试
##用上面苹果的数据作为例子进行测试
#训练集
train.apple <-data.frame(
size=c("大","小","大","大","小","小"),
weight=c("轻","重","轻","轻","重","轻"),
color=c("红","红","红","绿","红","绿"),
taste=c("good","good","bad","bad","bad","good")
)
#待预测样本
oneObs<-data.frame(
feature.name =c("size", "weight", "color"),
feature.value =c("大","重","红")
) #预测分类
pc <- class_prob(train.apple,"taste")
pfc <- feature_class_prob(train.apple,"taste")
pre_class(oneObs, pc, pfc)
预测结果为:
class.name pre_prob
1 bad 0.07407407
2 good 0.03703704
可见该苹果的口味为:bad
*********************************************这里是分割线****************************************************
我们使用这个方法再预测一下案例一中的数据集。
#数据集样本
data <- data.frame(c("sunny","hot","high","weak","no",
"sunny","hot","high","strong","no",
"overcast","hot","high","weak","yes",
"rain","mild","high","weak","yes",
"rain","cool","normal","weak","yes",
"rain","cool","normal","strong","no",
"overcast","cool","normal","strong","yes",
"sunny","mild","high","weak","no",
"sunny","cool","normal","weak","yes",
"rain","mild","normal","weak","yes",
"sunny","mild","normal","strong","yes",
"overcast","mild","high","strong","yes",
"overcast","hot","normal","weak","yes",
"rain","mild","high","strong","no"),
byrow = TRUE,
dimnames = list(day = c(),condition = c("outlook","temperature","humidity","wind","playtennis")),
nrow=14,
ncol=5); #待预测样本
ddata<-data.frame(
feature.name =c("outlook", "temperature","humidity","wind"),
feature.value =c("overcast","mild","normal","weak")
) #预测分类
pc <- class_prob(data,"playtennis")
pfc <- feature_class_prob(data,"playtennis")
pre_class(ddata, pc, pfc)
预测结果为:
class.name pre_prob
1 no 0.02666667
2 yes 0.13168724
预测结果为:yes,可见与案例一的结果一样。
数据分析与挖掘 - R语言:贝叶斯分类算法(案例二)的更多相关文章
- 数据分析与挖掘 - R语言:贝叶斯分类算法(案例一)
一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. 名词解释: 先验概率:由以往的数据分析得到的概率, 叫做先验概率. 后验概率:而在 ...
- 零基础数据分析与挖掘R语言实战课程(R语言)
随着大数据在各行业的落地生根和蓬勃发展,能从数据中挖金子的数据分析人员越来越宝贝,于是很多的程序员都想转行到数据分析, 挖掘技术哪家强?当然是R语言了,R语言的火热程度,从TIOBE上编程语言排名情况 ...
- 数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)
案例三比较简单,不需要自己写公式算法,使用了R自带的naiveBayes函数. 代码如下: > library(e1071)> classifier<-naiveBayes(iris ...
- 数据分析与挖掘 - R语言:KNN算法
一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. KNN算法步骤:需对所有样本点(已知分类+未知分类)进行归一化处理.然后,对未知分 ...
- 数据分析与挖掘 - R语言:K-means聚类算法
一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. 1.分析题目--有一个用户点击数据样本(husercollect)--按用户访问的 ...
- 数据分析与挖掘 - R语言:多元线性回归
一个简单的例子!环境:CentOS6.5Hadoop集群.Hive.R.RHive,具体安装及调试方法见博客内文档. 线性回归主要用来做预测模型. 1.准备数据集: X Y 0.10 42.0 0.1 ...
- R语言分类算法之随机森林
R语言分类算法之随机森林 1.原理分析: 随机森林是通过自助法(boot-strap)重采样技术,从原始训练样本集N中有放回地重复随机抽取k个样本生成新的训练集样本集合,然后根据自助样本集生成k个决策 ...
- R语言 神经网络算法
人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...
- R语言、02 案例2-1 Pelican商店、《商务与经济统计》案例题
编程教材 <R语言实战·第2版>Robert I. Kabacoff 课程教材<商务与经济统计·原书第13版> (安德森) P48.案例2-1 Pelican 商店 PS C: ...
随机推荐
- C#网页采集数据的几种方式(WebClient、WebBrowser和HttpWebRequest/HttpWebResponse)
一.通过WebClient获取网页内容 这是一种很简单的获取方式,当然,其它的获取方法也很简单.在这里首先要说明的是,如果为了实际项目的效率考虑,需要考虑在函数中分配一个内存区域.大概写法如下 //M ...
- <转>记dynamic的一个小坑 -- RuntimeBinderException:“object”未包含“xxx”的定义
→转载地址← 创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问它,代码如下: namespace ConsoleApplication1 { class Program { ...
- Java的各种打包方式
JAR (Java Archive file) 包含内容:class.properties文件,是文件封装的最小单元:包含Java类的普通库.资源(resources).辅助文件(auxiliary ...
- RMQ算法详解
RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1),所以是一个很快速的算法. 当然这个问题用线段树同样能够解决,算法复杂度为:O(N)~O(logN) . ...
- [No000010F]Git8/9-使用GitHub
我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人 ...
- MySQL8.0安装连接Navicat的坑
刚在官网装好MySQL8.0后,我的cmd识别不了启动数据库的指令 需要cd到MySQL的bin目录配置mysql mysqld --install mysqld --remove mysql -u ...
- beginner’s mistake
PHP Advanced and Object-Oriented Programming 3rd Edition Related to modularity is abstraction: class ...
- Mac终端的Cocoapods的安装及使用
阅读目录 第一步,首先要检查Mac是否安装了rvm.打开终端,输入指令 rvm -v 第二步,用rvm安装ruby环境 第三步,检查更新RubyGems(Ruby1.9.1 以后的版本自带RubyGe ...
- LeetCode 617 Merge Two Binary Trees 解题报告
题目要求 Given two binary trees and imagine that when you put one of them to cover the other, some nodes ...
- vue的生命周期(lifecycle)
这边转载一篇文章,个人认为写的不错,代码举了个例子很生动. https://segmentfault.com/a/1190000010336178