Matlab 朴素分类器

Matlab 朴素分类器,matlab,machine-learning,classification,probability,naivebayes,Matlab,Machine Learning,Classification,Probability,Naivebayes,在matlab中测试naive分类器时,尽管我在相同的样本数据上进行了训练和测试,但我得到了不同的结果,我想知道我的代码是否正确,是否有人可以帮助解释为什么会这样 %% dimensionality reduction columns = 6 [U,S,V]=svds(fulldata,columns); %% randomly select dataset rows = 1000; columns = 6; %# pick random rows indX = randperm( siz

在matlab中测试naive分类器时,尽管我在相同的样本数据上进行了训练和测试,但我得到了不同的结果,我想知道我的代码是否正确,是否有人可以帮助解释为什么会这样

%% dimensionality reduction 
columns = 6
[U,S,V]=svds(fulldata,columns);

%% randomly select dataset
rows = 1000;
columns = 6;

%# pick random rows
indX = randperm( size(fulldata,1) );
indX = indX(1:rows)';

%# pick random columns
%indY = randperm( size(fulldata,2) );
indY = indY(1:columns);

%# filter data
data = U(indX,indY);

%% apply normalization method to every cell
data = zscore(data);

%create a training set the same as datasample
training_data = data;

%match the class labels to the corresponding rows
target_class = classlabels(indX,:)

%classify the same data sample to check if naive bayes works
class  = classify(data, training_data, target_class, 'diaglinear')
confusionmat(test_class, class)
以下是一个例子:

请注意,它与正常的流量混淆在一起。我还没有到对看不见的数据进行分类的阶段,但我只是想测试它是否会对相同的数据进行分类

混淆矩阵输出:

ans =

   537     0     0     0     0     0     0     1     0
     0   224     0     0     0     1     0     1     0
     0     0    91    79     0    17    24     4     0
     0     0     0     8     0     0     2     0     0
     0     0     0     0     3     0     0     0     0
     0     0     0     0     0     1     0     0     0
     0     0     0     0     0     0     2     0     0
     0     0     0     0     0     0     0     3     0
     0     0     0     0     0     1     0     0     1

虽然我不知道这到底是什么,我可能在我的代码中弄错了,但我想我应该测试一下它的输出

您正在对降维数据使用分类器。分类器有点不精确,因为它需要泛化。在降维阶段,您正在丢失信息,这也会导致分类性能降低

即使在训练集上也不要期望完美的表现,这将是一个过度拟合的糟糕情况


至于混淆矩阵的使用
C(3,4)=79
意味着对于79个数据点,类别应为3,并将其归类为类别4。完整的矩阵表明,您的分类器对于类1和2运行良好,但是对于类3存在问题。其余的类几乎没有数据,因此很难判断分类器对它们的作用有多好。

zscore规范化如何?这应该被保留吗?@JungleBoogie zscore标准化当然不是一个坏主意,因为它使您的分类方法在数值上稳定。请记住,看不见的数据必须经过相同的转换。精确地说:您需要从应用于训练数据的zscore函数中提取变换矩阵。将zscore应用于测试数据将导致使用不同的转换。