为啥 WEKA NaiveBayes 分类器会给出标准。开发。全零属性的值?
Posted
技术标签:
【中文标题】为啥 WEKA NaiveBayes 分类器会给出标准。开发。全零属性的值?【英文标题】:why do WEKA NaiveBayes classifier gives a std. dev. value for all-zero attribute?为什么 WEKA NaiveBayes 分类器会给出标准。开发。全零属性的值? 【发布时间】:2016-07-30 01:32:41 【问题描述】:@relation weather
@attribute outlook 'overcast','rainy','sunny'
@attribute temperature numeric
@attribute humidity numeric
@attribute windy 'FALSE','TRUE'
@attribute play 'no','yes'
@attribute attr numeric
@data
'sunny',85,85,'FALSE','no',4
'sunny',80,90,'TRUE','no',9
'overcast',83,86,'FALSE','yes',0
'rainy',70,96,'FALSE','yes',0
'rainy',68,80,'FALSE','yes',0
'rainy',65,70,'TRUE','no',4
'overcast',64,65,'TRUE','yes',0
'sunny',72,95,'FALSE','no',3
'sunny',69,70,'FALSE','yes',0
'rainy',75,80,'FALSE','yes',0
'sunny',75,70,'TRUE','yes',0
'overcast',72,90,'TRUE','yes',0
'overcast',81,75,'FALSE','yes',0
'rainy',71,91,'TRUE','no',8
上面是WEKA的weather.arff数据,我只是手动添加了一个人工属性“attr”。 “play 'no', 'yes' 是类。请注意,“yes”类样本的所有“attr”值都是 0。
当我使用 WEKA NaiveByes 分类器构建模型(“使用训练集”)时,输出模型如下所示:
=== Classifier model (full training set) ===
Naive Bayes Classifier
Class
Attribute no yes
(0.38) (0.63)
===============================
outlook
overcast 1.0 5.0
rainy 3.0 4.0
sunny 4.0 3.0
[total] 8.0 12.0
temperature
mean 74.8364 72.9697
std. dev. 7.384 5.2304
weight sum 5 9
precision 1.9091 1.9091
humidity
mean 86.1111 78.8395
std. dev. 9.2424 9.8023
weight sum 5 9
precision 3.4444 3.4444
windy
FALSE 3.0 7.0
TRUE 4.0 4.0
[total] 7.0 11.0
attr
mean 5.85 0
std. dev. 2.7 0.375
weight sum 5 9
precision 2.25 2.25
对于“yes”类中的“attr”属性,平均值为 0,但 sd 为 0.375。我想知道 WEKA 中的 NaiveBayes 是如何计算的。是否使用了某种修正方法?
此外,当我尝试在 R 中使用 caret 包执行此操作时:
library(caret)
library(foreign)
weather <- read.arff('weather.arff')
set.seed(1)
fit <- train(play ~., data = weather, method = 'nb', trControl = trainControl(method = 'none'), tuneGrid = data.frame(fL = 0, usekernel = F))
错误提示:
Error in NaiveBayes.default(x, y, usekernel = param$usekernel, fL = param$fL, :
Zero variances for at least one class in variables: attr
Called from: NaiveBayes.default(x, y, usekernel = param$usekernel, fL = param$fL,
...)
我如何告诉 R 忽略这种全零属性的情况并给我一个(修正的)模型?
【问题讨论】:
我也有同样的问题;需要别人的帮助! 【参考方案1】:对于 attr 列,精度等于 2.75
在课堂上:weka.estimators.NormalEstimator,我们有:
89 // 一个区间内最多允许 3 个 sd 90 m_StandardDev = m_Precision / (2 * 3);
所以属性 attr 的最小标准差是 0.375
【讨论】:
感谢您抽出宝贵时间提供答案。正是因为像您这样乐于助人的同龄人,我们才能作为一个社区一起学习。以下是一些关于如何使您的答案出色的提示:How do I write a good answer。以上是关于为啥 WEKA NaiveBayes 分类器会给出标准。开发。全零属性的值?的主要内容,如果未能解决你的问题,请参考以下文章
使用 NaiveBayes 分类器对 Weka 中的一个实例进行分类
Weka 中 SMO、NaiveBayes 和 BayesNet 分类器的不同结果