1 朴素贝叶斯分类
我们使用NaiveBayes()函数来实现朴素贝叶斯分类算法,我们分为两种函数格式来分别介绍:
install.packages("klaR")
library(klaR)
library("MASS")
(1)公式 formula格式
以nmkat为待判别变量,以datatrain来生成贝叶斯判别规则,过程如下:
fitBayes1<-NaiveBayes(nmkat~.,datatrain) #以nmkat未判别变量,以datatrain来生成贝叶斯判别规则
names(fitBayes1) #显示fitBayes1所包含的输出项名称
fitBayes1$apriori #显示该1次执行过程中所用的先验概率
fitBayes1$tables
#tables 项储存了用于建立判别规则的所有变量在各类别下的条件概率,这是运行贝叶斯判别算法中的一个重要讨程:
fitBayes1$tables
结果分析:比如,变量“Sbad0)”部分记录了“是否有浴室”变量在各租金等级下,取0(有浴室)和1(无浴室)的概率。具体的,在等级1(不足500马克)的租金水平下,有浴室的占到约92.4%,无浴室的占7.6%,而且我们看到这两列数据在各租金水平下的取值差异并不大,最贵的房子(等级5)中有99.3%有浴室,而最便宜的房子(等级1)中也约有90%配有浴室。由此,我们可以认为浴室基本是出租房屋的必备部件,是一种硬需求,对租金水平的高低没有决定性作用。
结果分析:而地理位置 adr和住宅环境wohn变量的情况就与bad0变量不太相同,这两个变量的取值有着明显的趋势:随着租金水平的提高(等级1至等级5),地理位置/住宅环境较差(取1)的房子越来越少,地段较好(取3)的房子越来越多。可见,像地段、环境这种软需求对于房价的影响是不可忽视的,一个优良的环境和便利的地段往往可以提升租金。
(2) 默认格式
以默认格式建立贝叶斯判别规则,分别设置属性变量(除第12个变量 nmkat 外)与待判别变量(第12个变量nmkat)的取值,并记为fit_Bayes2,程序代码列示如下:
fit_Bayes2=NaiveBayes(data_train[,-12],data_train[,12])
2.各类别下变量密度可视化
我们按照如上得到的判别规则fit_Bayes1,以参与规则建立的其中三个定量变量为例来查看其密度图像。
这三个变量分别为占地面积wfl、租赁期mvdauer,以及每平方米净租金nmqm。
plot(fitBayes1,vars = "wfl",n=50,col=c(1,"darkgrey",1,"darkgrey",1))
结果分析:对于占地面积wfl变量,我们可以看到分别对应于5个租金等级的5条曲线的最高点从1至5依次右移,即所对应的占地面积水平依次提高,这是符合常识理解的,面积越大的房屋租金往往越高。具体的,可以观察到,1至3租金等级的样本多集中于40至60平方米的占地面积水平,而4、5等级,即租金高于850马克的房屋则在70~90平方米左右。
plot(fitBayes1,vars = "mvdauer",n=50,col=c(1,"darkgrey",1,"darkgrey",1))
结果分析:租金等级为5的房租的租赁年限远低于其他4个等级,前4个等级的租赁期多为2、3年至30、40年不等,而等级5的租赁期则基本都集中于2年左右。
plot(fitBayes1,vars = "nmqm",n=50,col=c(1,"darkgrey",1,"darkgrey",1))
结果分析:每平方米净租金nmqm变量在各租金水平下的分布看起来要均匀一些,即租金越高的房屋每平方米租金就越高,5条曲线按照等级顺序平稳依次右移,这也是符合我们理解的,单位面积租金高则总租金会高。
3.对测试集待判别变量取值进行预测
与讨论线性判别的效果时一样,我们以混淆矩阵和错误率两种方式来评价贝叶斯判别的预测效果,下面首先根据fit_Bayes1判别规则对测试集进行预测。
preBayes1<-predict(fitBayes1,datatest)
preBayes1
...
结果分析:这里包括预测类别class和后验概率posterior这两项,每个样本属于各类别的后验概率最高者为该样本被判定的类别。
table(datatest$nmkat,preBayes1$class)
#生成混淆矩阵,行为实际,列为预测,
结果分析:我们看到1,5类中的大部分样本被正确分类,差异性较小的2,3,4类则大部分没有被正确分类。
作者:zhang-X,转载请注明原文链接