MATLAB:具有单变量高斯的朴素贝叶斯
Posted
技术标签:
【中文标题】MATLAB:具有单变量高斯的朴素贝叶斯【英文标题】:MATLAB: Naive Bayes with Univariate Gaussian 【发布时间】:2012-09-24 22:03:24 【问题描述】:我正在尝试使用 UCI 机器学习团队发布的数据集来实现朴素贝叶斯分类器。我是机器学习的新手,并试图了解用于我的工作相关问题的技术,所以我认为最好先理解理论。
我正在使用 pima 数据集 (Link to Data - UCI-ML),我的目标是为 K 类问题构建朴素贝叶斯单变量高斯分类器(数据仅适用于 K=2)。我已经完成了数据拆分,并计算了每个班级的平均值、标准偏差、每个班级的先验,但在此之后我有点卡住了,因为我不确定在此之后我应该做什么以及如何做。我有一种感觉,我应该计算后验概率,
这是我的代码,我使用百分比作为向量,因为我想看到当我从 80:20 拆分增加训练数据大小时的行为。基本上,如果您通过 [10 20 30 40],它将从 80:20 拆分中获取该百分比,并使用 80% 的 10% 作为训练。
function[classMean] = naivebayes(file, iter, percent)
dm = load(file);
for i=1:iter
idx = randperm(size(dm.data,1))
%Using same idx for data and labels
shuffledMatrix_data = dm.data(idx,:);
shuffledMatrix_label = dm.labels(idx,:);
percent_data_80 = round((0.8) * length(shuffledMatrix_data));
%Doing 80-20 split
train = shuffledMatrix_data(1:percent_data_80,:);
test = shuffledMatrix_data(percent_data_80+1:length(shuffledMatrix_data),:);
train_labels = shuffledMatrix_label(1:percent_data_80,:)
test_labels = shuffledMatrix_data(percent_data_80+1:length(shuffledMatrix_data),:);
%Getting the array of percents
for pRows = 1:length(percent)
percentOfRows = round((percent(pRows)/100) * length(train));
new_train = train(1:percentOfRows,:)
new_trin_label = shuffledMatrix_label(1:percentOfRows)
%get unique labels in training
numClasses = size(unique(new_trin_label),1)
classMean = zeros(numClasses,size(new_train,2));
for kclass=1:numClasses
classMean(kclass,:) = mean(new_train(new_trin_label == kclass,:))
std(new_train(new_trin_label == kclass,:))
priorClassforK = length(new_train(new_trin_label == kclass))/length(new_train)
priorClassforK_1 = 1 - priorClassforK
end
end
end
end
【问题讨论】:
【参考方案1】:首先,根据频率计数计算每个类别标签的概率。对于数据集中给定的数据样本和给定的类,您可以计算每个特征的概率。之后,将样本中所有特征的条件概率相互乘以所考虑的类标签的概率。最后,比较所有类标签的值,选择概率最大的类标签(贝叶斯分类规则)。
为了计算条件概率,您可以简单地使用正态分布函数。
【讨论】:
以上是关于MATLAB:具有单变量高斯的朴素贝叶斯的主要内容,如果未能解决你的问题,请参考以下文章
三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯伯努利朴素贝叶斯多项式朴素贝叶斯
朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点