高次元のデ,タを分類する特徴量の選択
この例では,高次元デ,タを分類するための特徴量を選択する方法を示します。具体的には,最も一般的な特徴選択アルゴリズムのひとである逐次特徴選択を実行する方法を示します。ホ、ルドアウトと交差検証を使用して、選択した特徴量の性能を評価する方法に、いても示します。
統計を学ぶうえで重要なのは,特徴量の数(次元)を減らすことです。特徴量の数が多く観測の数が限定されたデータセット (バイオインフォマティクス データなど) が多く存在する場合、特徴量の数が多いことは、目標とする学習結果を得るには適切ではありません。また、観測数が限定されていると、学習アルゴリズムがノイズに過適合する可能性があります。特徴量数を減らすと、ストレージと費やす時間が削減され、より正確に理解できるようになります。
特徴量数を減らすには,特徴選択と特徴変換という2の主な方法があります。特徴選択アルゴリズムでは,オリジナルの特徴セットから特徴量のサブセットを選択します。特徴変換方法では,オリジナルの高次元特徴空間から次元の低い新しい空間にデ,タを変換します。
デ,タの読み込み
血清プロテオミクスパターン診断を使用すると,疾患のある患者と疾患のない患者の観測を区別することができます。プロファイルパターンは,SELDI(表面増強レーザ脱着/イオン化)タンパク質質量分析を使用して生成されます。これらの特徴量は,特定の質量/充填量値での选区オン強度レベルです。
この例では,wcx2タンパク質配列を使用して生成された高解像度の卵巣癌デ,タセットを使用します。生物信息学工具箱の预处理原始质谱数据(生物信息学工具箱)の例で説明されている手順と同様の前処理手順を実行すると,2の変数奥林匹克广播服务公司
およびgrp
がデ,タセットに含まれます。変数奥林匹克广播服务公司
は,4000個の特徴量と216個の観測値から構成されています。grp
の各要素によって,奥林匹克广播服务公司
の対応する行が属するグル,プが定義されます。
负载ovariancancer;谁
名称大小字节类属性grp 216x1 25056 cell obs 216x4000 3456000 single
学習セットと検定セットへのデ,タの分割
この例で使用する関数の一部では,matlab®に組み込まれている乱数発生関数を呼び出します。この例で示された結果を再現するには,次のコマンドを実行して乱数発生器を既知の状態に設定します。コマンドを実行しないと,結果が異なる場合があります。
rng (8000“旋风”);
学習データの性能(再代入の性能)は,独立した検定セットにおけるモデルの性能を推測するには適切ではありません。再代入性能は楽観的になりすぎる場合が多くあります。選択したモデルの性能を予測するには,モデルの構築に使用されなかった別のデータセットでの性能を評価する必要があります。この例では,cvpartition
を使用してサ▪▪ズ160の学習セットとサ▪▪ズ56の検定セットにデ▪▪タを分割します。学習セットと検定セットのグル,プ比率は,ど,らもgrp
の場合とほとんど同じです。学習デ,タを使用して特徴量を選択し,検定デ,タの選択された特徴量の性能を検証します。このような方法は通常,ホ,ルドアウト検証と呼ばれます。モデルを評価および選択するために簡単で広く使用されているもう1つの方法として交差検証があります。交差検証にいてはこの例の後半で説明します。
holdoutCVP = cvpartition(grp,“坚持”56)
holdoutCVP =保留交叉验证分区NumObservations: 216 NumTestSets: 1 TrainSize: 160 TestSize: 56
dataTrain = obs(holdoutcvs .training,:);grpTrain = grp(holdoutCVP.training);
すべての特徴量を使用してデ,タを分類する際の問題
最初に特徴量数を減らさないと,特徴量数が観測数を大幅に上回るため,この例で使用されるデータセットの分類アルゴリズムは失敗する場合があります。この例では,分類アルゴリズムとしてqda(2次判別分析)を使用します。次のコマンドに示すように,すべての特徴量を使用してデータにQDAを適用すると,各グループで共分散行列を推定するのに十分な標本を得られないため,誤差が発生します。
试一试yhat = category (obs(test(holdoutCVP),:), dataTrain, grpTrain,“二次”);抓我显示(ME.message);结束
TRAINING中各组的协方差矩阵必须是正定的。
簡単なフィルタ,方法を使用した特徴量の選択
ここでの目的は,優れた分類性能を得ることができる重要な特徴量の小規模なセットを見つけ出して,データの次元を減らすことです。特徴選択アルゴリズムは大きく分けて2種類あります。フィルタ,方法とラッパ,方法です。フィルター方法は,データの一般的特性に依存して,選択された学習アルゴリズム(この例ではQDA)を含まない特徴のサブセットを評価および選択します。ラッパ,方法では,選択された学習アルゴリズムの性能を使用して,各候補特徴のサブセットを評価します。ラッパー方法では,選択された学習アルゴリズムに最適な特徴量を検索しますが,学習アルゴリズムの実行時間が長い場合,フィルター方法より速度が大幅に低下する可能性があります。“と”“フィルターラッパー”の概念については,文献(约翰·g·Kohavi r (1997)“特征子集选择的包装器”,人工智能,Vol.97, No.1-2, pp.272-324)を参照してください。この例では,フィルタ方法とラッパ方法の例を1ず示します。
フィルタ,は通常,簡単か,高速であるため,前処理手順として使用されます。バイオインフォマティクスデータで広く使用されるフィルター方法では,特徴間に交互作用がないことを前提に,各特徴に一変量基準を個別に適用します。
たとえば,各特徴にt検定を適用して,グル,プの分割における有効性の測定として各特徴のp値(またはt統計量の絶対値)を比較するとします。
dataTrainG1 = dataTrain(grp2idx(grpTrain)==1,:);dataTrainG2 = dataTrain(grp2idx(grpTrain)==2,:);[h,p,ci,stat] = ttest2(dataTrainG1,dataTrainG2, dataTrainG2,“Vartype”,“不平等”);
各特徴によって2のグルプがどの程度適切に分割されているかにいて一般的な概念を得るには,p値の実測の累積分布関数(cdf)をプロットします。
ecdf (p);包含(“P值”);ylabel (“提供价值”)
0値に近いp値をも特徴量は約35%,0.05より小さなp値をも50%。つまり,識別力の大きいオリジナルの5000の特徴量のうち2500以上の特徴量ということになります。特徴量のp値(またはt統計量の絶対値)に応じてこれらの特徴量を並べ替えて,並べ替えられたリストから特徴量を選択することが可能ですが,ドメインに熟知している,または検討可能な特徴量の最大数が外部の制約に基づいてあらかじめ指定されている場合を除き,通常,必要な特徴量数を決定することは困難です。
必要な特徴量数を決定する簡単な方法の1つには,検定セットの多国评价(誤分類誤差,観測数によって除算した誤分類観測数など)を特徴量数の関数としてプロットします。学習セットには160の観測しか存在しないため,qdaに適用できる特徴量の最大数は限られます。それ以外の場合,共分散行列を推定するのに十分な標本が各グル,プに存在しないことがあります。実際,この例で使用しているデータの場合,2つのグループのホールドアウト分割とサイズから,QDAを適用できる特徴量の最大許容数は約70になります。70年ここで5からまでの特徴量数について多国评价を計算し,特徴量数の関数として多国评价のプロットを示します。選択したモデルの性能を合理的に推定するために重要なのは,QDAモデルに適合する160の学習標本を使用して,56の検定観測の多国评价(次のプロットで青の円マーク)を計算することです。また,再代入誤差が検定誤差の優れた推定誤差ではない理由を説明するため,再代入多国评价を赤の三角形マークで示しています。
[~,featureIdxSortbyP] = sort(p,2);对特征进行排序testMCE = 0 (1,14);resubMCE = 0 (1,14);NFS = 5:5:70;Classf = @(xtrain,ytrain,xtest,ytest)...总和(~ strcmp(欧美、分类(xtest、xtrain ytrain,“二次”)));resubCVP = cvpartition(长度(grp),“resubstitution”)
resubCVP = Resubstitution (no partition of data) NumObservations: 216 NumTestSets: 1 TrainSize: 216 TestSize: 216
为i = 1:14 fs = featureIdxSortbyP(1:nfs(i));testMCE(i) = crossval(classf,obs(:,fs),grp,“分区”holdoutCVP).../ holdoutCVP.TestSize;resubMCE(i) = crossval(classf,obs(:,fs),grp,“分区”, resubCVP) /...resubCVP.TestSize;结束情节(nfs、testMCE“o”nfs resubMCE,“r ^”);包含(“功能数量”);ylabel (“乎”);传奇({“测试集上的MCE”“Resubstitution MCE”},“位置”,“西北”);标题(“简单的过滤器特征选择方法”);
便宜上、classf
は無名関数として定義されています。また,classfは,指定された学習セットのQDAと適合し,指定された検定セットの誤分類の標本数を返します。独自の分類アルゴリズムを作成する場合,次に示すように,classfを別のファイルに配置することをお勧めします。
%函数err = classf(xtrain,ytrain,xtest,ytest)% yfit =分类(xtest,xtrain,ytrain,'二次元');% err = sum(~strcmp(ytest,yfit));
再代入MCEはかなり楽観的になっています。多国评价では,より多くの特徴量が使用されると常に減少し,60を超える特徴量が使用されると0になります。ただし,再代入誤差が減少しているときに検定誤差が増加すると,過適合が発生する場合があります。この簡単なフィルター特徴選択方法では,15の特徴量が使用されると,検定セットで最小の多国评价が取得されます。プロットで20以上の特徴量が使用されると,過適合を示します。検定セットの最小のMCEは12.5%です。
testMCE (3)
Ans = 0.1250
これらは,最小MCEを達成する最初の15の特徴量です。
featureIdxSortbyP (1:15)
ans =1×152814 2813 2721 2720 2452 2645 2644 2642 2650 2643 2731 2638 2730 2637 2398
逐次特徴選択の適用
上記の特徴選択アルゴリズムでは,特徴量間の交互作用が考慮されていません。また,各ランクに基づいてリストから選択された特徴量には,冗長な情報が含まれる可能性があるため,一部の特徴量は必要ありません。たとえば,最初に選択された特徴(2814列)と2番目に選択された特徴(2813列)の間の線形相関係数はほぼ0.95となります。
相关系数(dataTrain (:, featureIdxSortbyP (1)), dataTrain (:, featureIdxSortbyP (2)))
ans =单0.9447
このような簡単な特徴選択手順は通常,高速であるため,前処理手順として使用されます。より高度な特徴選択アルゴリズムでは,性能が向上します。最も広く使用されている方法の1として,逐次特徴選択があります。この方法では,特定の停止条件に達するまで連続的に追加(前方検索)または削除(後方検索)を行うことで,特徴量のサブセットを選択します。
この例では,ラッパ,形式で前方の逐次特徴選択を使用して重要な特徴量を検出します。より具体的には,分類における一般的な目的は,多国评价を最小化することであるため,特徴選択手順では,候補特徴サブセットの性能を示すインジケーターとして,各候補特徴サブセットの学習アルゴリズム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 144 144 144 TestSize: 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
前のセクションで前処理手順として取得したフィルタ,結果を使用して特徴量を選択します。たとえば,次のように150の特徴量を選択します。
fs1 = featureIdxSortbyP(1:50 0);
これら150の特徴量に前方逐次特徴選択を適用します。関数sequentialfs
は,必要な特徴量数を決定するための簡単な方法(既定のオプション)を提供します。交差検証多国评价の最初の局所的最小値が検出されると,関数sequentialfsは停止します。
fsLocal = sequentialfs(classf,dataTrain(:,fs1),grpTrain,“简历”, tenfoldCVP);
選択された特徴量は次のようになります。
fs1 (fsLocal)
ans =1×323378643288
これらの3つの特徴量をもつ選択されたモデルの性能を評価するには,56の検定標本について多国评价を計算します。
testmclocalal = crossval(classf,obs(:,fs1(fsLocal)),grp,“分区”,...holdoutCVP) / holdoutCVP。TestSize
testmclocalal = 0.0714
3つの特徴量だけが選択されているため,多国评价は,簡単なフィルター特徴選択方法を使用して最小の多国评价の半分強となります。
アルゴリズムは途中で停止する場合があります。合理的な範囲の特徴量数ではなく交差検証多国评价の最小値を検索することで,より小さな多国评价を達成できる場合があります。たとえば,最大50の特徴量の特徴量数の関数として交差検証多国评价のプロットを次のように描画します。
[fsCVfor50,historyCV] = sequentialfs(classf,dataTrain(:,fs1),grpTrain,...“简历”tenfoldCVP,“Nf”, 50);情节(historyCV。暴击,“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,ignore] = find([historyCV.In(1,:);diff(historyCV.In(1:10,:))]');fs1 (orderlist)
ans =1×102337 864 3288 2721 2814 2658 2452 2731 2650 2720
これら10の特徴量を評価するには,検定セットでqdaのMCEを計算します。これまでで最小のMCE値が取得されます。
testMCECVfor10 = crossval(classf,obs(:,fsCVfor10),grp,“分区”,...holdoutCVP) / holdoutCVP。TestSize
testMCECVfor10 = 0.0357
興味深いのは,特徴量数の関数として(たとえば,特徴選択手順の実行時に交差検証を実行せずに)学習セットの再代入多国评价値のプロットを調べた場合です。
[fsResubfor50,historyResub] = sequentialfs(classf,dataTrain(:,fs1),...grpTrain,“简历”,“resubstitution”,“Nf”, 50);情节(1:50,historyCV。暴击,“波”、1:50 historyResub。暴击,“r ^”);包含(“功能数量”);ylabel (“乎”);传奇({“10倍CV MCE”“Resubstitution MCE”},“位置”,“不”);
ここでも,再代入MCEの値はかなり楽観的です。再代入多国评价の値は交差検証多国评价より小さい値が多く,16の特徴量が使用されると,再代入多国评价は0になります。検定セットでこれら16の特徴量のMCE値を計算して,実際の性能を確認できます。
fsResubfor16 = fs1(historyresubin (16,:));testMCEResubfor16 = crossval(classf,obs(:,fsResubfor16),grp,“分区”,...holdoutCVP) / holdoutCVP。TestSize
testMCEResubfor16 = 0.0714
testMCEResubfor16
は,検定セットの(特徴選択手順の再代入によって選択された)16の特徴量の性能で,検定セットの(特徴選択手順の10分割交差検証によって選択された)10の特徴量の性能であるtestMCECVfor10
の約2倍となっています。ここでも,特徴量を評価および選択する際に性能の推定として再代入誤差を使用するのは適切ではありません。最終的な評価手順の場合だけでなく,特徴選択手順の場合にも,再代入誤差の使用を避けることをお勧めします。