主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

高次元のデータを分類する特徴量の選択

この例では,高次元データを分類するための特徴量を選択する方法を示します。具体的には,最も一般的な特徴選択アルゴリズムのひとつである逐次特徴選択を実行する方法を示します。ホールドアウトと交差検証を使用して,選択した特徴量の性能を評価する方法についても示します。

統計を学ぶうえで重要なのは,特徴量の数(次元)を減らすことです。特徴量の数が多く観測の数が限定されたデータセット(バイオインフォマティクスデータなど)が多く存在する場合,特徴量の数が多いことは,目標とする学習結果を得るには適切ではありません。また,観測数が限定されていると,学習アルゴリズムがノイズに過適合する可能性があります。特徴量数を減らすと,ストレージと費やす時間が削減され,より正確に理解できるようになります。

特徴量数を減らすには、特徴選択と特徴変換という 2.つの主な方法があります。特徴選択アルゴリズムでは、オリジナルの特徴セットから特徴量のサブセットを選択します。特徴変換方法では、オリジナルの高次元特徴空間から次元の低い新しい空間にデータを変換します。

データの読み込み

血清プロテオミクスパターン診断を使用すると,疾患のある患者と疾患のない患者の観測を区別することができます。プロファイルパターンは,SELDI(表面増強レーザ脱着/イオン化)タンパク質質量分析を使用して生成されます。これらの特徴量は,特定の質量/充填量値でのイオン強度レベルです。

この例では,WCX2タンパク質配列を使用して生成された高解像度の卵巣癌データセットを使用します。生物信息工具箱™の原始质谱数据的预处理の例で説明されている手順と同様の前処理手順を実行すると、2.つの変数obsおよびgrpがデータセットに含まれます。変数obsは、4000個の特徴量と 216個の観測値から構成されています。grpの各要素によって、obsの対応する行が属するグループが定義されます。

负载卵巢癌;谁
名称大小字节类属性grp 216x1 25056 cell obs 216x4000 3456000 single

学習セットと検定セットへのデータの分割

この例で使用する関数の一部では,MATLAB®に組み込まれている乱数発生関数を呼び出します。この例で示された結果を再現するには,次のコマンドを実行して乱数発生器を既知の状態に設定します。コマンドを実行しないと,結果が異なる場合があります。

rng(8000,“旋风”);

学習データの性能(再代入の性能)は,独立した検定セットにおけるモデルの性能を推測するには適切ではありません。再代入性能は楽観的になりすぎる場合が多くあります。選択したモデルの性能を予測するには,モデルの構築に使用されなかった別のデータセットでの性能を評価する必要があります。この例では,cvpartitionを使用してサイズ 160の学習セットとサイズ 56の検定セットにデータを分割します。学習セットと検定セットのグループ比率は、どちらもgrpの場合とほとんど同じです。学習データを使用して特徴量を選択し、検定データの選択された特徴量の性能を検証します。このような方法は通常、ホールドアウト検証と呼ばれます。モデルを評価および選択するために簡単で広く使用されているもう 1.つの方法として交差検証があります。交差検証についてはこの例の後半で説明します。

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

すべての特徴量を使用してデータを分類する際の問題

最初に特徴量数を減らさないと、特徴量数が観測数を大幅に上回るため、この例で使用されるデータセットの分類アルゴリズムは失敗する場合があります。この例では、分類アルゴリズムとして QDA(2次判別分析) を使用します。次のコマンドに示すように、すべての特徴量を使用してデータに 量子点を適用すると、各グループで共分散行列を推定するのに十分な標本を得られないため、誤差が発生します。

尝试yhat = classify(obs(test(holdoutCVP),:), dataTrain, grpTrain,“二次”);接住ME显示器(ME.message);结束
TRAINING中各组的协方差矩阵必须为正定。

簡単なフィルター方法を使用した特徴量の選択

ここでの目的は、優れた分類性能を得ることができる重要な特徴量の小規模なセットを見つけ出して、データの次元を減らすことです。特徴選択アルゴリズムは大きく分けて 2.種類あります。フィルター方法とラッパー方法です。フィルター方法は、データの一般的特性に依存して、選択された学習アルゴリズム (この例では QDA)を含まない特徴のサブセットを評価および選択します。ラッパー方法では、選択された学習アルゴリズムの性能を使用して、各候補特徴のサブセットを評価します。ラッパー方法では、選択された学習アルゴリズムに最適な特徴量を検索しますが、学習アルゴリズムの実行時間が長い場合、フィルター方法より速度が大幅に低下する可能性があります。「フィルター」と「ラッパー」の概念については、文献 (John G.Kohavi R.(1997)“特征子集选择的包装器”,人工智能,第97卷,第1-2期,第272-324页)を参照してください。この例では、フィルター方法とラッパー方法の例を 1.つずつ示します。

フィルターは通常、簡単かつ高速であるため、前処理手順として使用されます。バイオインフォマティクス データで広く使用されるフィルター方法では、特徴間に交互作用がないことを前提に、各特徴に一変量基準を個別に適用します。

たとえば,各特徴にt検定を適用して,グループの分割における有効性の測定として各特徴のp値(またはt統計量の絶対値)を比較するとします。

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

各特徴によって 2.つのグループがどの程度適切に分割されているかについて一般的な概念を得るには、p値の実測の累積分布関数(CDF)をプロットします。

ecdf (p);包含(“P值”);ylabel (“CDF值”

0値に近いp値をもつ特徴量は約35%,0.05より小さなp値をもつ特徴量は 50%以上 存在します。つまり、識別力の大きいオリジナルの 5000の特徴量のうち 2500以上の特徴量ということになります。特徴量のp値(またはt統計量の絶対値)に応じてこれらの特徴量を並べ替えて,並べ替えられたリストから特徴量を選択することが可能ですが,ドメインに熟知している,または検討可能な特徴量の最大数が外部の制約に基づいてあらかじめ指定されている場合を除き,通常,必要な特徴量数を決定することは困難です。

必要な特徴量数を決定する簡単な方法の1つには,検定セットの多国评价(誤分類誤差,観測数によって除算した誤分類観測数など)を特徴量数の関数としてプロットします。160年学習セットにはの観測しか存在しないため,QDAに適用できる特徴量の最大数は限られます。それ以外の場合,共分散行列を推定するのに十分な標本が各グループに存在しないことがあります。実際,この例で使用しているデータの場合,2つのグループのホールドアウト分割とサイズから,QDAを適用できる特徴量の最大許容数は約70になります。70年ここで5からまでの特徴量数について多国评价を計算し,特徴量数の関数として多国评价のプロットを示します。選択したモデルの性能を合理的に推定するために重要なのは,QDAモデルに適合する160の学習標本を使用して,56の検定観測の多国评价(次のプロットで青の円マーク)を計算することです。また,再代入誤差が検定誤差の優れた推定誤差ではない理由を説明するため,再代入多国评价を赤の三角形マークで示しています。

[~, featureIdxSortbyP] = (p, 2);%对特征进行排序testMCE=zeros(1,14);resubMCE=zeros(1,14);nfs=5:5:70;classf=@(xtrain,ytrain,xtest,ytest)...求和(~strcmp)Y测试,分类(X测试,X训练,Y训练,“二次”)));resubCVP=cvpartition(长度(grp),“重新替代”
resubCVP = Resubstitution (no partition of data) nummobservations: 216 NumTestSets: 1 TrainSize: 216 TestSize: 216
i = 1:14 fs = featureIdxSortbyP(1:nfs(i));testMCE (i) = crossval (classf突发交换(:,fs), grp,“分区”holdoutCVP).../holdoutCVP.TestSize;resubMCE(i)=crossval(类别F,obs(:,fs),grp,“分区”,resubCVP)/...resubCVP.TestSize;结束情节(nfs、testMCE“o”nfs resubMCE,“r ^”);包含(“功能数量”);ylabel (“MCE”);传奇({"测试集上的MCE "“重新替代MCE”},“位置”“西北”);标题(“简单过滤器特征选择方法”);

便宜上、classfは無名関数として定義されています。また,classfは,指定された学習セットのQDAと適合し,指定された検定セットの誤分類の標本数を返します。独自の分類アルゴリズムを作成する場合,次に示すように,classfを別のファイルに配置することをお勧めします。

% function err = classf(xtrain,ytrain,xtest,ytest)%yfit=分类(xtest、xtrain、ytrain、‘二次’);% err = sum(~strcmp(ytest,yfit));

再代入多国评价はかなり楽観的になっています。多国评价では,より多くの特徴量が使用されると常に減少し,60を超える特徴量が使用されると0になります。ただし,再代入誤差が減少しているときに検定誤差が増加すると,過適合が発生する場合があります。この簡単なフィルター特徴選択方法では,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列)と2番目に選択された特徴(2813列)の間の線形相関係数はほぼ0.95となります。

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

このような簡単な特徴選択手順は通常、高速であるため、前処理手順として使用されます。より高度な特徴選択アルゴリズムでは、性能が向上します。最も広く使用されている方法の 1.つとして、逐次特徴選択があります。この方法では、特定の停止条件に達するまで連続的に追加 (前方検索) または削除 (後方検索) を行うことで、特徴量のサブセットを選択します。

この例では、ラッパー形式で前方の逐次特徴選択を使用して重要な特徴量を検出します。より具体的には、分類における一般的な目的は、MCEを最小化することであるため、特徴選択手順では、候補特徴サブセットの性能を示すインジケーターとして、各候補特徴サブセットの学習アルゴリズム 量子点の MCEを使用して逐次検索を行います。特徴量を選択して 量子点モデルに適合するには学習セットを使用し、最終的に選択された特徴の性能を評価するには検定セットを使用します。特徴選択手順で各候補特徴サブセットの性能を評価および比較するには、階層化された 10分割交差検証を学習セットに適用します。交差検証を学習セットに適用することが重要である理由については、後述します。

まず、学習セットの階層化された 10分割を生成します。

tenfoldCVP = cvpartition (grpTrain,“kfold”, 10)
tenfoldCVP=K-折叠交叉验证分区数值观测:160个数值试验集:10列车尺寸:144试验尺寸:16 16 16

前のセクションで前処理手順として取得したフィルター結果を使用して特徴量を選択します。たとえば,次のように150の特徴量を選択します。

fs1 = featureIdxSortbyP (1:15);

150年これらの特徴量に前方逐次特徴選択を適用します。関数顺序は、必要な特徴量数を決定するための簡単な方法 (既定のオプション) を提供します。交差検証 MCEの最初の局所的最小値が検出されると、関数 顺序は停止します。

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

選択された特徴量は次のようになります。

fs1(本地)
ans=1×32337 864 3288

これらの 3.つの特徴量をもつ選択されたモデルの性能を評価するには、56の検定標本について MCEを計算します。

testMCELocal=crossval(classf,obs(:,fs1(fsLocal)),grp,“分区”...保持架CVP)/保持架CVP.TestSize
testMCELocal = 0.0714

3つの特徴量だけが選択されているため,多国评价は,簡単なフィルター特徴選択方法を使用して最小の多国评价の半分強となります。

アルゴリズムは途中で停止する場合があります。合理的な範囲の特徴量数ではなく交差検証多国评价の最小値を検索することで,より小さな多国评价を達成できる場合があります。たとえば,最大50の特徴量の特徴量数の関数として交差検証多国评价のプロットを次のように描画します。

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

10の特徴量が使用されると、交差検証 MCEは最小値に達し、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] =查找([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,obs(:,fsCVfor10),grp,“分区”...保持架CVP)/保持架CVP.TestSize
testMCECVfor10=0.0357

興味深いのは,特徴量数の関数として(たとえば,特徴選択手順の実行時に交差検証を実行せずに)学習セットの再代入多国评价値のプロットを調べた場合です。

[fsResubfor50, historyResub] = sequentialfs (classf dataTrain (:, fs1),...grpTrain,“简历”“重新替代”“Nf”, 50);情节(1:50,historyCV。暴击,“波”,1:50,历史研究结果暴击,“r ^”);包含(“功能数量”);ylabel (“MCE”);传奇({“10倍CV MCE”“重新替代MCE”},“位置”“不”);

ここでも、再代入 MCEの値はかなり楽観的です。再代入 MCEの値は交差検証 MCEより小さい値が多く、16の特徴量が使用されると、再代入 MCEは 0になります。検定セットでこれら 16の特徴量の MCE値を計算して、実際の性能を確認できます。

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

testMCEResubfor16は,検定セットの(特徴選択手順の再代入によって選択された)16の特徴量の性能で,検定セットの(特徴選択手順の10分割交差検証によって選択された)10の特徴量の性能であるtestMCECVfor10の約2倍となっています。ここでも,特徴量を評価および選択する際に性能の推定として再代入誤差を使用するのは適切ではありません。最終的な評価手順の場合だけでなく,特徴選択手順の場合にも,再代入誤差の使用を避けることをお勧めします。

参考

関連するトピック