MATLAB:朴素贝叶斯与单变量高斯

问题描述 投票:1回答:1

我想利用UCI机器学习团队公布的数据集来实现朴素贝叶斯分类器。我是新来的机器学习,并试图了解技术使用我的工作有关的问题,所以我认为这是更好地得到理解理论第一。

我使用皮马数据集(Link to Data - UCI-ML),我的目标是建立朴素贝叶斯单变量高斯分类对于K类问题(数据仅用于有K = 2)。我已经做了分割数据,并计算平均为每个类,标准偏差,先验为每个类,但在这之后我有点卡住,因为我不知道什么,我应该如何在这之后做。我有,我应该计算后验概率的感觉,

这里是我的代码,我使用的百分比作为载体,因为我想看到的行为,我是从80:20分增加训练数据的大小。基本上,如果你通过[10 20 30 40]将采取该百分比从80:20分裂,并使用10%的80%,如训练。

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
matlab machine-learning naivebayes
1个回答
2
投票

首先,计算埃维类标签的基础上频率计数的概率。对于给定的数据样本,并在您的数据集给定的类,你计算埃维功能的可能性。在此之后,乘由彼此所考虑的类标签的概率样本中的所有功能的条件概率。最后,比较所有类标签的价值和你选择的类与概率最大(贝叶斯分类规则)的标签。

为了计算条件概率,你可以简单地使用正态分布函数。

© www.soinside.com 2019 - 2024. All rights reserved.