这实际上是正确的,因为从这个模拟示例中可以使用 R
library(mvtnorm)
sigma <- matrix(c(1,0,0,1), ncol=2)
x1 <- rmvnorm(n=500, mean=c(0,0), sigma=sigma, method="chol")
x2<- rmvnorm(n=500, mean=c(3,0), sigma=sigma, method="chol")
x3 <- rmvnorm(n=500, mean=c(1.5,3), sigma=sigma, method="chol")
x4 <- rmvnorm(n=500, mean=c(-2.5,3), sigma=sigma, method="chol")
x5 <- rmvnorm(n=500, mean=c(-4,-2), sigma=sigma, method="chol")
data<-data.frame(rbind(x1,x2,x3,x4,x5))
data$class<-c(rep(1,500),rep(2,500),rep(3,500),rep(4,500),rep(5,500))
可视化数据
library(ggplot2)
qplot(data[,1],data[,2],colour=data[,3])
让我们拟合第一个模型,看看准确度和预测图
library(e1071)
fit1<-naiveBayes(factor(class) ~., data, laplace = 0)
data$predicted<-predict(fit1,data[,1:2],type="class")
sum(data$predicted==data$class)/length(data$predicted)
[1] 0.9228
qplot(data[,1],data[,2],colour=data[,3])
现在更改数据并为具有二元分类的第二个模型重复相同的步骤
data2<-data
data2$class<-c(rep(2,500),rep(1,500),rep(2,1000),rep(1,500))
qplot(data2[,1],data2[,2],colour=data2[,3])
fit2<-naiveBayes(factor(class) ~., data2, laplace = 0)
data2$predicted<-predict(fit2,data2[,1:2],type="class")
sum(data2$predicted==data2$class)/length(data2$predicted)
qplot(data2[,1],data2[,2],colour=data2$predicted)
根本原因是每个类都有一个分布增强了灵活性,并且可以对具有不同形状的区域进行建模