最近做了点机器学习的东西,老师让用比较贝叶斯分离器,那就从最简单也是比较经典的朴素贝叶斯开始吧。
在R语言中是e1071包中的一个函数naiveBayes实现了朴素贝叶斯 这个函数有几个参数 慢慢解释
首先这个包的描述是:利用Bayes定理,计算出一个分类类变量的条件后验概率。这里是朴素贝叶斯所以也就假定每条数据的特征值的属性是独立无关的,不过有些论文也指出弱相关的时候也可以很好的分类不影响
naiveBayes(formula, data, laplace = 0, ..., subset, na.action = na.pass)
这是函数的调用以及参数
formula 是一个公式的调用 类似于 formu=x1+x2....等等的,也可以是一个不带分类标签的矩阵。
data 就是你的训练集了
laplace 这个是拉普拉斯平滑,是用在当数据比较小的时候,样本类别出现了新的属性,这样联合概率会出现0的情况,这样分类器就无法辨别属于哪一个类别了
这个数一般取一个0到1之间的小数,但是我试过自己的训练集,不管多小或者多大貌似对模型都没有什么影响,不知道为什么。
na.action 如果找到了NAs(缺省值),则指定要采取的操作。默认的操作是不计算概率因素。另一种方法是na。省略,这导致对任何需要的变量缺少值的情况
的拒绝。(注意:如果给定,这个参数必须被命名。)这个参数没啥用。因为一般处理数据集前都会先把缺省值插补一下的。
还有几个不常用的例如threshold 在eps范围内用概率替换单元格。eps 用你自定的值来替换拉普拉斯平滑的一个值
一般来说朴素贝叶斯用于预测 数据的属性值有可能是连续的也有可能是离散的,这个包中我只找到了一个连续的用法,就是一个提示写的
朴素贝叶斯分类器(至少是这个实现的)假设了预测变量的独立性,以及服从高斯分布(目标类)。对于缺少值的属性,可以忽略相应的表条目以进行预测。
下面是包里自带的实例
## Categorical data only: data(HouseVotes84, package = "mlbench") model <- naiveBayes(Class ~ ., data = HouseVotes84) predict(model, HouseVotes84[1:10,]) predict(model, HouseVotes84[1:10,], type = "raw") pred <- predict(model, HouseVotes84) table(pred, HouseVotes84$Class) ## using laplace smoothing: model <- naiveBayes(Class ~ ., data = HouseVotes84, laplace = 3) pred <- predict(model, HouseVotes84[,-1]) table(pred, HouseVotes84$Class) ## Example of using a contingency table: data(Titanic) m <- naiveBayes(Survived ~ ., data = Titanic) m predict(m, as.data.frame(Titanic)) ## Example with metric predictors: data(iris) m <- naiveBayes(Species ~ ., data = iris) ## alternatively: m <- naiveBayes(iris[,-5], iris[,5]) m table(predict(m, iris), iris[,5])