我想在我的小数据集(65x8)上执行简单的LDA。我有65个实例(样本),8个特征(属性)和4个类。任何用于LDA的matlab代码,因为我知道Matlab Toolbox没有LDA功能所以我需要编写自己的代码。有什么帮助吗?
我在网上找到了这段代码
load /Data;
All_data= Data(:,1:8);
All_data_label= Data(:,9);
testing_ind = [];
for i = 1:length(Data)
if rand>0.8
testing_ind = [testing_ind, i];
end
end
training_ind = setxor(1:length(Data), testing_ind);
[ldaClass,err,P,logp,coeff] = classify(Data(testing_ind,:),...
Data((training_ind),:),Data_label(training_ind,:),'linear');
[ldaResubCM,grpOrder] = confusionmat(All_data_label(testing_ind,:),ldaClass)
然后我得到了这个结果 ldaClass =
3
2
3
2
1
4
3
3
1
2
1
1
2
错误=
0.2963
P =
0.0001 0.0469 0.7302 0.2229
0.1178 0.5224 0.3178 0.0419
0.0004 0.2856 0.4916 0.2224
0.0591 0.6887 0.1524 0.0998
0.8327 0.1637 0.0030 0.0007
0.0002 0.1173 0.3897 0.4928
0.0000 0.0061 0.7683 0.2255
0.0000 0.0241 0.5783 0.3976
0.9571 0.0426 0.0003 0.0000
0.2719 0.5569 0.1630 0.0082
0.9999 0.0001 0.0000 0.0000
0.9736 0.0261 0.0003 0.0000
0.0842 0.6404 0.2634 0.0120
coeff =
包含字段的4x4结构数组: 类型 名1 NAME2 常量 线性
ldaResubCM =
4 0 0 0
0 3 1 0
0 1 1 0
0 0 2 1
grpOrder =
1
2
3
4
所以我有65个实例,8个属性和4个类(1,2,3,4)。所以不知道如何解释这些结果。有什么帮助吗?
答案 0 :(得分:1)
结果的解释直接来自classify
的文件。
classify
根据训练数据和标签(第二和第三个参数)训练分类器,并将分类器应用于测试数据(第一个参数)。
ldaClass
根据使用训练数据点和标签训练的分类器,给出为测试数据点选择的类。
err
是训练错误率,即使用使用该数据训练的分类器错误分类的训练数据点的分数。训练错误率低估了独立测试数据的预期误差。
P
给出后验概率。即对于每个测试数据点(行),它为每个类(列)提供数据点属于该类的概率。类(每行)的概率总和为1。 ldaClass
中的确定分类源于后验概率,使得对于每个测试数据点,选择具有最高概率的类:[~, ind] = max(P')
得到ind = ldaClass'
。
coeff
包含有关受过训练的分类器的详细信息。为了使用它,您必须详细研究分类器的工作原理。
confusionmat
将分类器分配给测试数据的类与已知的真类进行比较,并生成一个结果表confusion matrix。每行对应于测试数据点的真实类,每列对应于分类器指定的类。对角线上的数字表示正确的分类;在您的结果中,您的测试错误为1 - sum(diag(confusionmat)) / sum(confusionmat(:))
0.308。特别是,混淆矩阵显示了属于第二类的4个测试数据点中的三个,三个被正确分类,一个不正确(属于第三类)。
grpOrder
只给出编号为1到4的四个类的显式类标签;在您的情况下,索引和标签是相同的。