如何做一个分类使用Matlab ?

21日视图(30天)
Aaronne
Aaronne 2013年3月14日
你好聪明,
我有数据(可以在这里下载:[在这里输入链接描述][1]),并试图运行一个简单的基于LDA分类特征存储在数据集,11日即F1, F2,……季。
我写了一些代码在Matlab使用只有2特性。我可以问一些问题根据我码有吗?
clc;clf;清晰的所有;关闭所有;
% %负载提取的特征
特点= xlsread (“ExtractedFeatures.xls”);
numFeatures = 23;
% %定义地面实况
groundTruthGroup =细胞(numFeatures, 1);
groundTruthGroup (1:15) = cellstr (‘好’);
groundTruthGroup(16:结束)= cellstr (“坏”);
% %选择功能
featureSelcted =[(:, 3)特性,特性(:,9)];
% % LDA运行
[ldaClass, ldaResubErr] =分类(featureSelcted (:, 1:2), featureSelcted (:, 1:2), groundTruthGroup,“线性”);
坏= ~ strcmp (ldaClass groundTruthGroup);
ldaResubErr2 =(坏)/ numFeatures总和;
[ldaResubCM, grpOrder] = confusionmat (groundTruthGroup ldaClass);
% %散点图
gscatter (featureSelcted (: 1) featureSelcted (:, 2), groundTruthGroup,“rgb”,osd的);
包含(”功能3 ');
ylabel (“功能9”);
持有;
情节(featureSelcted(坏,1),featureSelcted(坏,2),“kx”);
持有;
% %留一交叉验证
leaveOneOutPartition = cvpartition (numFeatures,“leaveout”);
ldaClassFun = @ (xtrain ytrain xtest)(分类(xtest、xtrain ytrain,“线性”));
ldaCVErr = crossval (“宏”featureSelcted (: 1:2),
groundTruthGroup,“predfun”ldaClassFun,“分区”,leaveOneOutPartition);
% %显示结果
clc;
disp (‘______________________________________结果______________________________________________________);
disp (' ');
disp (sprintf (“Resubstitution LDA误差(由Matlab内置训练误差计算):% d 'ldaResubErr));
disp (sprintf (Resubstitution错误的LDA(手动训练误差计算):% d 'ldaResubErr2));
disp (' ');
disp (的混淆矩阵:);
disp (ldaResubCM)
disp (sprintf (交叉验证错误的LDA(一):% d 'ldaCVErr));
disp (' ');
disp (“______________________________________________________________________________________________________”);
我我的第一个问题是如何做特征选择?例如,使用向前或向后特征选择,和基于学习的方法吗?
我有检查,Matlab有“sequentialfs”方法,但不知道如何把它变成我的代码。
二世。如何使用Matlab的分类方法进行分类有超过2功能?我们应该首先执行PCA吗?例如,目前我们有11个特性,我们运行PCA生产2或3个人电脑,然后运行分类?(我希望写一个循环来添加一个接一个的每个特性进行特征选择。不仅运行PCA维度优待。)
三世。我也尝试运行ROC分析。我指的是网页[在这里输入链接描述][2]有一个实现的一个简单的LDA方法和生产LDA的线性分数。然后我们可以使用“perfcurve”ROC曲线。
iii a。但是,我不确定如何使用“分类”方法和“perfcurve”中华民国。
希望。同时,如何交叉验证的中华民国吗?
IIIc。我们有“OPTROCPT”后,这是最好的分界点,我们如何使用这个分界点产生更好的分类?
% % ROC分析
featureSelcted =[(:, 3)特性,特性(:,9)];
groundTruthNumericalLable =[0(15日1);1(8日)];
%计算线性判别系数
ldaCoefficients = LDA (featureSelcted groundTruthNumericalLable);
训练数据的% Calulcate线性分数
ldaLinearScores = [(numFeatures 1) featureSelcted]的* ldaCoefficients ';
%计算类概率
classProbabilities = exp (ldaLinearScores)。/ repmat(总和(exp (ldaLinearScores), 2), [1 - 2]);
%配合得分的概率
图中,
[玻璃钢,TPR,用力推,AUC, OPTROCPT] = perfcurve (groundTruthNumericalLable (: 1), classProbabilities (: 1), 0);
情节(玻璃钢,TPR,“或者——”)
包含(“假阳性率(玻璃钢,1-Specificity)”);ylabel (“真阳性率(TPR,灵敏度)”)
标题(“中华民国LDA的分类”)
网格;
四。目前,我计算的准确性训练和交叉验证错误的分类和“crossval”功能。我可以问如何得到这些值在总结通过使用“classperf”?
诉如果有人知道一个好的教程使用Matlab统计工具箱做机器学习任务与一个完整的示例请告诉我。
一些Matlab帮助的例子是真的困惑我,因为的例子是,我真的机器学习的新手。机器人的抱歉如果我问一些问题。非常感谢你的帮助。
一个。

接受的答案

Ilya
Ilya 2013年3月15日
如果您使用的是相对近期的版本,我建议切换到 ClassificationDiscriminant 。它有更多的功能,提供了更好的接口。例如,交叉验证图谱是容易的。
我可以通过“基于学习方法”意味着不同的东西。分类是一个流行的方法:从一个空集和添加特性开始一个接一个,直到分类错误停止减少。没有正式的测试。这可能是也可能不是你想要的。
二世。你不需要做任何特别的使用判别超过2的特性。通过所有功能 分类 ,它会弄清楚该做什么。一个线性变换(PCA)的正交旋转,以防不能帮助找到最优线性类边界。
IIIc。第三输出 perfcurve 是一个数组的阈值分类的分数。(在判别的情况下,这些分数后类概率。)一旦你发现最优玻璃钢和TPR,你可以找到相应的阈值。分类一个观察积极如果积极类的后验概率高于该阈值和分类-否则。
对于其他的问题,请参阅文档。有所有功能你提到的例子。如果还不清楚的东西,展示你的尝试,并问一个更具体的问题。

更多的答案(0)