主要内容

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

アンサンブル分類における不均衡データまたは一様ではない誤分類コストの処理

多くの応用で、データのクラスを非対称的に処理したい場合があります。たとえば、あるクラスの観測値が他のクラスよりはるかに多くデータに含まれている場合があります。また、あるクラスの観測値を誤分類すると、別のクラスの観測値を誤分類する場合より深刻な結果になることもあります。このような場合は、RUSBoost アルゴリズムを使用 ('Method'として'rusboost'を指定) するか、fitcensembleの名前値のペア引数引数'事先的'または'Cost'を使用でき。

过小または表现れてクラス学习セット含まれている场合は,,名前ととペアペアペア'事先的'または RUSBoost アルゴリズムを使用します。たとえば、シミュレーションによって学習データを取得するとします。クラスAのシミュレートはクラスBのシミュレート计算负荷高いので,クラスAの観测は少なく,クラスBの観測値は多く生成することにします。しかし、実際の (シミュレートしたのではない) 状況では、クラスAとクラスBの混合比率が異なると考えられます。このようなケースでは、'事先的'を使用して、実際の状況で観測されると考えられる値に近づくようにクラスAおよびBの事前を设定し关数关数fitcensembleは,合計が1になるように事前確率を正規化します。すべての事前確率に同じ正の係数を乗算しても、分類の結果に影響はありません。不均衡なデータを処理する方法には、RUSBoostアルゴリズム ('Method',“ rusboost”) を使用するものもあります。このアルゴリズムを使用する場合、事前確率を調整する必要はありません。詳細は、ランダム アンダーサンプリング ブースティング不均衡データで分类を参照してください。

学習データでは適切に表現されているクラスを非対称的に処理するには、名前と値のペアの引数'Cost'を使用します。癌患者の良性腫瘍と悪性腫瘍を分類したいとします。悪性腫瘍の特定に失敗すること (偽陰性) は、良性を悪性と誤診する (偽陽性) よりも深刻な結果をもたらします。悪性を良性と誤診する場合には高いコストを、良性を悪性と誤診する場合には低いコストを割り当てなければならないはずです。

誤分類のコストは、非負の要素をもつ正方行列として渡さなければなりません。この行列の要素C(i,j)は,真のクラスがiである场合,観测値クラスクラスjに分类コストをます。コスト行列C(i,i)の対角要素は、0でなければなりません。前の例では、悪性腫瘍をクラス 1、良性腫瘍をクラス 2 として選択できます。この場合、コスト行列は次のように設定できます。

[ 0 c 1 0 ]

c> 1はは悪性肿疡を良性误诊し场合のを表し表しますます。。。は相対値値です。。すべてすべてのコストコストに同じ同じ正因子乘算てしししも

クラスが 2 つだけの場合、fitcensembleではi = 1,2およびj≠iであるクラスについて P ˜ i = C i j P i を使用して事前確率を調整します。Piは,fitcensembleに渡した事前確率または学習データのクラス頻度から計算された事前確率です。 P ˜ i は,調整された事前確率です。次に、fitcensembleは既定コスト行列使用します。

さらに、これらの調整済みの確率を弱学習器の学習に使用します。つまり、コスト行列の操作は事前確率の操作と等価です。

3 つ以上のクラスを使用する場合も、fitcensembleは入力コストを調整済み事前確率に変換します。この変換はさらに複雑です。まず、fitcensembleliuのliuの[1]で説明されている行列方程式を解こうとします。解を求めるのに失敗した場合は、fitcensembleはbreimanなどによって说明れいるいるいる平均コストコストコストををしし[2]。詳細はZadrozny,朗格弗德および安[3]を参照してください。

不均衡なコストによるアンサンブル学习学习

例で不均衡分类分类を使用し分类分类木にに学习学习ををさせるさせるさせる方法方法ををますます。。このこの例例ではは,,肝炎肝炎肝炎肝炎患者患者患者患者をを使用使用使用使用使用确认し。セットの说明について,,UCI Machine Learning Data Repositoryを参照してください。

uciリポジトリ肝炎のセットを文字としてます。次,,textscancell配列文字のの配列配列配列配列ます。変数名名が格纳格纳さされれてているいるいる文字文字ベクトルベクトルベクトルののののののの

options = weboptions('ContentType','文本'); hepatitis = textscan(webread(['http://archive.ics.uci.edu/ml/'...'machine-learning-databases/hepatitis/hepatitis.data'),选择),...' % % f % f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','Delimiter',',',...'EndOfLine','\ n','TreatAsEmpty','?'); size(hepatitis)
ans =1×21 20
varnames = {'dieOrLive''年龄''性别''steroid'“抗病人”'fatigue'...“不适”“厌食”'liverBig''liverFirm''脾'...'spiders''ascites'“静脉曲张”'bilirubin'“烷磷酸盐”'sgot'...'albumin''protime'“组织学”};

肝炎1行20列列文字ののの配列配列。は応答応答(Liveordie) および 19 の異種混合予測子に対応します。

予測子が格納されている数値行列と、応答カテゴリの'Die'および'Live'が格納されている cell ベクトルを指定します。応答は 2 つの値を含みます。1は患者が亡くなったことを、2は患者が生存したことを意味します。応答カテゴリを使用して、応答に対応する文字ベクトルの cell 配列を指定します。肝炎の最初変数は応答含まれます。

X = cell2mat(hepatitis(2:end)); ClassNames = {'Die''Live'};Y = ClassNames(hepatitis{:,1});

Xは19个予测子がされて数値行列。。Yは応答格纳れている文字ベクトルのの配列配列配列です。

欠損値についてデータを検査します。

图barh(sum(isnan(x),1)/size(x,1))h = gca;h.ytick = 1:numel(varnames)-1;h.yticklabel = varnames(2:end);ylabel('Predictor')xlabel('Fraction of missing values')

ほとんどのに値ががあり,そのそのそのそのそのそのそのつでつでつでつでそのその欠损欠损欠损値ととなっなっなっててますい。。そのそのためため,,代理分岐分岐ををもつもつもつ决定决定决定决定使用使用することことことこと,代理使用た场合で学习时间それ长くはなりなりん。

代理分岐を使用する分類木のテンプレートを作成します。

rng(0,'twister')%可再现性t = Templatetree('surrogate','all');

データまたはデータの説明を検証して、カテゴリカル予測子を特定します。

X(1:5,:)
ans =5×1930.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 1.0000 85.0000 18.0000 4.0000 NaN 1.0000 50.0000 1.0000 1.0000 2.0000 1.0000 2.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 0.9000 135.0000 42.0000 3.5000 NaN 1.0000 78.0000 1.0000 2.0000 2.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.00002.0000 0.7000 96.0000 32.0000 4.0000 NaN 1.0000 31.0000 1.0000 NaN 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 0.7000 46.0000 52.0000 4.0000 80.0000 1.0000 34.0000 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 1.0000 NaN 200.0000 4.0000 NaN 1.0000

2 ~13および19ははであるとられますこの推论,,,UCI Machine Learning Data Repositoryのデータセットの説明によって確認できます。

カテゴリカル変数リストします。

catIdx = [2:13,19];

150 の学習器とGentleBoostアルゴリズムを使用して、交差検証を使用したアンサンブルを作成します。

Ensemble = fitcensemble(X,Y,'Method',',...'NumLearningCycles',150,'Learners',t,'PredictorNames',VarNames(2:end),...'LearnRate',0.1,'CategoricalPredictors',catidx,'KFold',5); figure plot(kfoldLoss(Ensemble,'Mode',“累积”,'LossFun','exponential')xlabel('Number of trees')ylabel('Cross-validated exponential loss')

混同行列を検査して、アンサンブルによって正しく予測された患者を確認します。

[yfit,sfit] = kfoldpredict(Ensemble);ConfusionChart(Y,YFIT)

123名名の患者についてはアンサンブル112名名名名名生存正しく予测予测しししててていますしかししかし,,肝炎肝炎ででたたたしししししし名名名名名ににににに肝炎肝炎肝炎肝炎肝炎肝炎でで死亡だけです。

アンサンブルによる予測で発生する誤差には、次の 2 つのタイプがあります。

  • 患者の生存を予測したにも関わらず、患者が死亡した場合

  • 患者の死亡を予測したにも関わらず、患者が生存した場合

1 番目の誤差は 2 番目の誤差より 5 倍の悪影響をもたらすという前提があるとします。この前提を反映した新しい分類コスト行列を作成します。

cost.classnames = classNames;cost.classificationcosts = [0 5;1 0];

誤分類のコストに成本を使用する新しい交差検証アンサンブルを作成して、結果の混同行列を検査します。

EnsembleCost = fitcensemble(X,Y,'Method',',...'NumLearningCycles',150,'Learners',t,'PredictorNames',VarNames(2:end),...'LearnRate',0.1,'CategoricalPredictors',catidx,'KFold',5,'Cost',cost); [yFitCost,sFitCost] = kfoldPredict(EnsembleCost); confusionchart(Y,yFitCost)

予想どおり、新しいアンサンブルでは死亡する患者の分類機能が向上しています。意外なことに、新しいアンサンブルでは生存する患者の分類も向上しています。ただし、これは統計的に有意な改善ではありません。交差検証の結果は無作為であるため、この結果は単なる統計変動です。この結果から、生存する患者の分類はコストにあまり大きい影響を与えないと考えることができます。

参照

[1]Zhou, Z.-H. and X.-Y. Liu. “On Multi-Class Cost-Sensitive Learning.” Computational Intelligence. Vol. 26, Issue 3, 2010, pp. 232–257 CiteSeerX.

[2] Breiman, L., J. H. Friedman, R. A. Olshen, and C. J. Stone. Classification and Regression Trees. Boca Raton, FL: Chapman & Hall, 1984.

[3] Zadrozny,B.,J。Langford和N. Abe。“成本敏感的学习通过成本典型的示例加权。”第三次IEEE国际数据挖掘会议,435-442。2003。

参考

||||

関連するトピック