主要内容

为高维数据分类选择特性

这个例子展示了如何为高维数据分类选择特性。更具体地说,它展示了如何执行顺序特征选择,这是一个最受欢迎的特征选择算法。它还展示了如何使用维持和交叉验证评估选定的性能特性。

减少的数量特性(维度)在统计学习中很重要。对许多数据集与大量的特性和数量有限的观察,如生物信息学数据,通常许多功能不用于生产所需的学习结果与有限的观测可能导致学习算法overfit噪音。减少功能还可以节省存储空间和计算时间,增加可理解性。

有两种主要的方法来减少特点:特征选择和特征转换。特征选择算法选择功能从原来的特性集的一个子集;功能转换方法将原始高维特征空间的数据到一个新的空间维数减少。

加载数据

血清蛋白质组学模式诊断可以用来区分观察患者和没有疾病。配置文件生成模式应用表面增强激光解吸电离(SELDI)蛋白质质谱分析。这些特性在特定质量或电荷离子强度水平值。

下面的例子使用了高分辨率的卵巢癌生成数据集使用WCX2蛋白质阵列。一些预处理步骤之后,类似于生物信息学工具箱™的例子所示原始质谱数据预处理(生物信息学工具箱),数据集有两个变量奥林匹克广播服务公司grp。的奥林匹克广播服务公司变量由216年与4000年观测特征。中的每个元素grp定义的组对应的行奥林匹克广播服务公司属于。

负载ovariancancer;谁
类属性名称大小字节grp 216 x1 25056细胞观察216 x4000 3456000单

将数据划分为训练集和测试集

在这个例子中所使用的一些功能调用MATLAB®内置的随机数生成函数。复制的结果显示在这个例子中,执行下面的命令来设置随机数发生器到一个已知状态。否则,您的结果可能有所不同。

rng (8000“旋风”);

在训练数据的性能(resubstitution性能)不是一个好估计模型的性能在一个独立的测试集。resubstitution性能通常是过于乐观。预测的性能选择模型,您需要评估其性能在另一个数据集不是用来构建模型。在这里,我们使用cvpartition将数据分为训练集的大小160和测试集的大小56。训练集和测试集的比例大致相同的组作为grp。我们选择功能使用训练数据和判断选择的性能特性的测试数据。这是通常被称为抵抗验证。另一个简单的和广泛使用的方法来评估和选择模型是交叉验证,这将在稍后说明。

holdoutCVP = cvpartition (grp),“坚持”56)
holdoutCVP =抵抗交叉验证分区NumObservations: 216 NumTestSets: 1 TrainSize: 160 TestSize: 56
奥林匹克广播服务公司(dataTrain = holdoutCVP.training:);grpTrain = grp (holdoutCVP.training);

使用的所有特性分类数据的问题

没有第一次减少特征的数量,一些分类算法使用的数据集将会失败在这个例子中,由于特征的数量远远大于观测的数量。在这个例子中,我们使用二次判别分析(QDA)作为分类算法。如果我们应用QDA数据使用的所有特性,如以下所示,我们将得到一个错误,因为没有足够的样品每组估计协方差矩阵。

试一试yhat =分类(奥林匹克广播服务公司(测试(holdoutCVP):), dataTrain, grpTrain,“二次”);我显示(ME.message);结束
每组的协方差矩阵训练必须正定。

选择使用一个简单的过滤特性的方法

我们的目标是降低数据的维数发现少量的重要功能,这可以给良好的分类性能。特征选择算法大致可以分为两类:过滤方法和包装方法。过滤方法依赖于一般特征数据的评估和选择特征子集不涉及选择学习算法(QDA在这个例子)。包装方法使用选择学习算法的性能评估每个候选人特性子集。包装方法搜索功能更好的适合选择学习算法,但它们可以显著低于过滤方法如果学习算法需要很长时间。“过滤器”和“包装”的概念描述了约翰·g·Kohavi r (1997)特征子集选择“包装器”,人工智能,Vol.97 No.1-2 pp.272 - 324。这个例子展示了一个实例的过滤方法和包装器方法的一个实例。

过滤器通常用作一个预处理步骤,因为它们是简单和快速的。广泛使用的过滤方法是应用生物信息学数据的一元标准分别在每个特性,假设没有相互作用的特性。

例如,我们可能应用t以及每个特性和比较p的价值(或绝对的值t统计数据)为每个特性的测量是多么有效分离群体。

dataTrainG1 = dataTrain (grp2idx (grpTrain) = = 1:);dataTrainG2 = dataTrain (grp2idx (grpTrain) = = 2,:);(h p, ci, stat) = ttest2 (dataTrainG1 dataTrainG2,“Vartype”,“不平等”);

为了得到一个通用的想法截然分开两组的每个功能,我们把经验累积分布函数(CDF)p值:

ecdf (p);包含(“P值”);ylabel (“提供价值”)

大约有35%的特性p值接近于零和超过50%的特性p值小于0.05,这意味着有2500多个特征在原5000的特性有很强的歧视。一个可以根据他们的这些特性p值的绝对值t统计),并选择一些功能的排序列表。然而,通常很难确定有多少功能需要,除非有一些领域知识或特性的最大数量,可以考虑提前已经决定基于外部约束。

一个快速的方法来决定需要的数量特征是情节多国评价(误分类错误,即。,the number of misclassified observations divided by the number of observations) on the test set as a function of the number of features. Since there are only 160 observations in the training set, the largest number of features for applying QDA is limited, otherwise, there may not be enough samples in each group to estimate a covariance matrix. Actually, for the data used in this example, the holdout partition and the sizes of two groups dictate that the largest allowable number of features for applying QDA is about 70. Now we compute MCE for various numbers of features between 5 and 70 and show the plot of MCE as a function of the number of features. In order to reasonably estimate the performance of the selected model, it is important to use the 160 training samples to fit the QDA model and compute the MCE on the 56 test observations (blue circular marks in the following plot). To illustrate why resubstitution error is not a good error estimate of the test error, we also show the resubstitution MCE using red triangular marks.

[~,featureIdxSortbyP] = (p, 2);%排序的功能testMCE = 0 (1、14);resubMCE = 0 (1、14);nfs = 5:5:70;classf = @ (xtrain、ytrain xtest、欧美)总和(~ strcmp(欧美、分类(xtest、xtrain ytrain,“二次”)));resubCVP = cvpartition(长度(grp),“resubstitution”)
resubCVP = Resubstitution(没有分区的数据)NumObservations: 216 NumTestSets: 1 TrainSize: 216 TestSize: 216
我=一14 fs = featureIdxSortbyP (1: nfs (i));testMCE (i) = crossval (classf突发交换(:,fs), grp,“分区”holdoutCVP)/ holdoutCVP.TestSize;resubMCE (i) = crossval (classf突发交换(:,fs), grp,“分区”,resubCVP) /resubCVP.TestSize;结束情节(nfs、testMCE“o”nfs resubMCE,“r ^”);包含(特征的数量);ylabel (“乎”);传奇({对测试集的多国评价”“Resubstitution MCE”},“位置”,“西北”);标题(“简单的过滤特征选择方法”);

为了方便起见,classf被定义为一个匿名函数。它适合QDA在给定的训练集,并返回给定测试集的分类错误的样本数量。如果你开发自己的分类算法,你可能想要把它在一个单独的文件,如下:

%函数错= classf (xtrain、ytrain xtest、欧美)% yfit =分类(xtest、xtrain ytrain,“二次”);%呃=总和(~ strcmp(欧美,yfit));

resubstitution MCE过于乐观。它持续减少使用更多的功能时,下降为零当60多个特性。然而,如果测试误差增加resubstitution错误仍在减少,那么可能发生过度拟合。这个简单的过滤特征选择方法时测试集上的最小的多国评价15使用特性。情节显示过度拟合开始发生在20或更多的特性。测试集上的最小的多国评价:12.5%

testMCE (3)
ans = 0.1250

这些最初的15特性实现最低多国评价:

featureIdxSortbyP (1:15)
ans =1×152814 2813 2721 2720 2452 2645 2644 2642 2650 2643 2731 2638 2730 2637 2398

应用连续的特征选择

上述特征选择算法不考虑相互作用特性;此外,功能从列表中选择根据他们的个人排名也可能包含冗余信息,因此,并不是所有的特性是必要的。例如,第一个选择特征之间的线性相关系数(列2814)和第二选择功能(列2813)几乎是0.95。

相关系数(dataTrain (:, featureIdxSortbyP (1)), dataTrain (:, featureIdxSortbyP (2)))
ans =0.9447

这种简单的特征选择过程通常是作为一个预处理步骤,因为它很快。更高级的特征选择算法提高性能。连续的特征选择是使用最广泛的技术之一。它选择一个子集的特征顺序添加(向前搜索)或删除(向后搜索),直到满足停止条件。

在这个例子中,我们使用连续的特征选择包装方式找到重要的功能。更具体地说,由于分类的典型目标是最小化多国评价,特征选择程序执行顺序搜索使用的多国评价学习算法对每个候选人QDA功能子集作为性能指标子集。训练集用于选择的特性和适应QDA模型,测试集是用来评估最后选定的性能特性。在特征选择程序,评估和比较每个候选人的性能特征子集,我们应用分层10倍交叉验证训练集。稍后我们将说明为什么采用交叉验证训练集是很重要的。

首先我们为训练集生成一个分层分区10倍:

tenfoldCVP = cvpartition (grpTrain,“kfold”,10)
tenfoldCVP = K-fold交叉验证分区NumObservations: 160 NumTestSets: 10 TrainSize: 144 144 144 144 144 144 144 144 144 144 TestSize: 16 16 16 16 16 16

然后我们使用前一节的过滤结果作为预处理步骤选择功能。例如,我们选择150的特性:

fs1 = featureIdxSortbyP (1:15);

我们应用序列特征选择在150年这些特性。这个函数sequentialfs提供了一种简单的方式(默认选项)来决定多少特性是必要的。它停止当第一个局部最小值的交叉验证多国评价。

fsLocal = sequentialfs (classf dataTrain (:, fs1) grpTrain,“简历”,tenfoldCVP);

选择的特点如下:

fs1 (fsLocal)
ans =1×32337 864 3288

评估的性能选择模型这三个特性,我们计算出多国评价56个测试样品。

testMCELocal = crossval (classf突发交换(:,fs1 (fsLocal)), grp,“分区”,holdoutCVP) / holdoutCVP.TestSize
testMCELocal = 0.0714

只有三个特性被选中,多国评价仅略超过一半的最小的多国评价使用简单的过滤特征选择方法。

该算法可能会过早地停止。有时一个较小的多国评价是可以实现的通过寻找最低的交叉验证多国评价的数量在一个合理的范围内功能。例如,我们画的情节交叉验证多国评价的函数特性的数量为50的特性。

[fsCVfor50, historyCV] = sequentialfs (classf dataTrain (:, fs1) grpTrain,“简历”tenfoldCVP,“Nf”,50);情节(historyCV.Crit“o”);包含(特征的数量);ylabel (“简历多国评价”);标题(“与交叉验证序列特征选择”);

交叉验证多国评价达到最小值时使用10特性,曲线保持不变的范围从10 35个功能特性。同时,曲线上升超过35功能使用,这意味着出现过度拟合。

通常比有更少的特性,所以我们选择10个特点:

:fsCVfor10 = fs1 (historyCV.In(10日))
fsCVfor10 =1×102814 2721 2720 2452 2650 2731 2337 2658 864 3288

展示这些10特性在他们选择的顺序顺序前进过程中,我们发现他们第一次成为真正的行historyCV输出:

[orderlist,忽略]=找到([historyCV.In (1:);diff (historyCV.In (1:10,:))]);fs1 (orderlist)
ans =1×102337 864 3288 2721 2814 2658 2452 2731 2650 2720

评估这些10特性,计算他们的多国评价QDA测试集。我们得到多国评价的最小值:

testMCECVfor10 = crossval (classf突发交换(:,fsCVfor10)、grp,“分区”,holdoutCVP) / holdoutCVP.TestSize
testMCECVfor10 = 0.0357

有趣的是看的情节resubstitution MCE训练集(即值。,without performing cross-validation during the feature selection procedure) as a function of the number of features:

[fsResubfor50, historyResub] = sequentialfs (classf dataTrain (:, fs1),grpTrain,“简历”,“resubstitution”,“Nf”,50);情节(1:50,historyCV.Crit“波”1:50 historyResub.Crit,“r ^”);包含(特征的数量);ylabel (“乎”);传奇({“10倍的简历多国评价”“Resubstitution MCE”},“位置”,“不”);

再次,resubstitution MCE值过于乐观。大多数都小于交叉验证多国评价价值观,和resubstitution多国评价使用16特性时趋于零。我们可以计算的多国评价价值这些16功能测试集上看到他们的真实性能:

:fsResubfor16 = fs1 (historyResub.In (16));testMCEResubfor16 = crossval (classf突发交换(:,fsResubfor16)、grp,“分区”,holdoutCVP) / holdoutCVP.TestSize
testMCEResubfor16 = 0.0714

testMCEResubfor16,这些16的性能特性(特征选择过程期间由resubstitution)测试集,大约是两倍testMCECVfor10选择的,10的性能特性(10倍交叉验证在特征选择过程)再次测试集。它表明,resubstitution误差通常不是一个好的性能估计来评估和选择功能。我们可能想避免使用resubstitution错误,不仅在最后的评价步骤,而且也在特征选择过程。

另请参阅

相关的话题