階層化されたクロス検証を使用する理由 なぜこれが分散に関連する利益に損害を与えないのですか?


29

特に応答クラスのバランスが取れていない場合は、階層化されたクロス検証を使用すると有益だと言われています。交差検証の目的の1つが元のトレーニングデータサンプルのランダム性を説明することである場合、元のトレーニングセットに代表的なクラス分布があることが確実でない限り、各フォールドに同じクラス分布を持たせることはこれに対して確実に機能します。

私の論理に欠陥はありますか?

編集 この方法がCVの利益を損なうかどうかに興味があります。フォールドにマイナークラスの単一の代表者がいないことを回避するために、小さなサンプル/非常に不均衡なクラス/両方がある場合に必要な理由がわかります。

論文クロスバリデーション研究におけるApples-to-Apples:Classifier Performance Measurementの落とし穴は、層別化のケースをうまく提唱していますが、すべての議論は「層別化が保護と一貫性を提供する」に等しいようですが、十分な保護は必要ありませんデータ。

答えは単に「データが十分にあることはめったにないので、不必要に使用します」です。

回答:


18

ブートストラップは、母集団から新しいサンプルを抽出する効果をシミュレートしようとしますが、明確なテストセット(置換後のNからNのサンプリング後の残基)を確保しようとはしません。

RxKフォールドクロス検証は、K個の異なるテストフォールドを保証しますが、その後、K-CVに対して独立性の仮定が保持されるように、異なるランダム分割に対してR回繰り返されますが、これは繰り返しで失われます。

層別交差検証は、統計を計算する前にテストラベルを確認してはならないという原則に違反しますが、フォールドのバランスを取ることのみが効果であるため、これは一般に無害であると考えられていますが、多様性の損失につながります(分散の望ましくない損失)。これは、母集団全体から自然に引き出すものに似たサンプルを作成するというBoostrapのアイデアからさらに進んでいます。階層化が重要である主な理由は、クラスの過剰または過少表示によって偏りすぎているため、分類アルゴリズムの欠陥に対処することです。バランス手法(選択または重み付け)を使用するアルゴリズムまたは偶然の正しい測定(カッパまたはできれば情報量)を最適化するアルゴリズムは、このようなアルゴリズムでさえ影響を受けませんが、

いくつかの小さなmに対して、各フォールドに各クラスの少なくともmインスタンスを強制することは、ブートストラップとCVの両方で機能する階層化の代替手段です。平滑化バイアスがあり、折り目が本来の予想よりもバランスが取れている傾向があります。

再集合と多様性:トレーニングフォールドで学習した分類器が一般化誤差の推定だけでなく融合に使用される場合、CV、成層ブートストラップおよび成層CVの剛性の増加は、ブートストラップ、強制ブートストラップと比較して、多様性の損失、および潜在的に回復力につながりますそして強制CV。


強制的なブートストラップが「より良い」場合に、階層化されたブートストラップが「失敗する」方法に関するいくつかの参考資料を提供することは可能でしょうか?
usεr11852が復活モニック言う

16

おそらくこのように考えることができます。100個のサンプル(クラス 'A'に90個、クラス 'B'に10個)があるデータセットがあるとします。この非常に不均衡な設計では、通常のランダム化グループを実行すると、「B」クラスの非常に少数(またはEVEN NONE!)でモデルを構築することになります。他のクラスが非常に少ない、またはまったくないデータでトレーニングされたモデルを構築している場合、よりまれなグループを効果的に予測するにはどうすればよいでしょうか?階層化された相互検証により、ランダム化が可能になりますが、これらの不均衡なデータセットが両方のクラスの一部を持つことも確認されます。

より「バランスのとれた」データセットで成層CVを使用することに対する懸念を和らげるために、Rコードを使用した例を見てみましょう。

require(mlbench)
require(caret)
require(cvTools)

# using the Sonar dataset (208 samples)
data(Sonar)

# see the distribution of classes are very well balanced
prop.table(table(Sonar$Class))

> prop.table(table(Sonar$Class))

M         R 
0.5336538 0.4663462 

# stratified
# set seed for consistency
# caret::createFolds does stratified folds by default
set.seed(123)
strat <- createFolds(Sonar$Class, k=10)

# non-stratified using cvTools
set.seed(123)
folds <- cvFolds(nrow(Sonar), K=10, type="random")
df <- data.frame(fold = folds$which, index = folds$subsets)
non_strat <- lapply(split(df, df$fold), FUN=function(x) x$index)

# calculate the average class distribution of the folds
strat_dist <- colMeans(do.call("rbind", lapply(strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
    non_strat_dist <- colMeans(do.call("rbind", lapply(non_strat, FUN = function(x) prop.table(table(Sonar$Class[x])))))
strat_dist
> strat_dist
M         R 
0.5338312 0.4661688 
non_strat_dist
> non_strat_dist
M         R 
0.5328571 0.4671429 

ご覧のとおり、バランスのとれたデータセットでは、フォールドは偶然に似たような分布になります。したがって、階層化されたCVは、これらの状況における単なる保証手段です。ただし、差異に対処するには、各分割の分布を調べる必要があります。状況によっては(50-50から始まる場合でも)、ランダムに30-70に分割されたフォールドが発生する可能性があります(上記のコードを実行すると、実際に起こっていることがわかります!)。これにより、モデルを正確に予測するのに十分なクラスがないため、全体的なCV分散が増加するため、パフォーマンスが低下する可能性があります。これは明らかに、分布に非常に極端な違いがある可能性が高い「制限された」サンプルがある場合により重要です。

非常に大きなデータセットでは、折り畳みは少なくとも「rarer」クラスのかなりの割合を含む可能性が高いため、階層化は必要ありません。ただし、私の個人的な意見では、データの量に関係なく、サンプルのバランスが取れていない場合、計算上の損失はなく、層別化を無視する本当の理由はありません。


はい、これはまったく理にかなっています。ただし、これは非常に特殊なケースであり、データ不足を考慮して実行しています。サンプルが10,000個ある場合、それを行いますか?私の質問は、理想的には十分なデータが与えられているので、それは良いアイデアですか?
ジェームズOwers 14年

1
@kungfujam、それはあなたのデータがどれほど不均衡であるかに依存します。膨大な量のデータがあったとしても、他のクラスは(ランダムに)非常に少数になる可能性があります。これに関するいくつかの研究があります。少し古いですが、 Kohaviはそれを報告しましたstratifcation is generally a better scheme, both in terms of bias and variance, when compared to regular cross-validation。完全なサンプリングスキームはありませんが、不均衡な設計では層別化が適切なアプローチです。
cdeterman

これありがとう。Kohaviの論文を見つけました。古いが金。一般的に、クラスは完全にバランスが取れておらず、データが制限されていることがわかります。=>層別化は一般的に優れています...しかし、合理的なバランスを考えると違反のように感じます!
ジェームズOwers 14年

@kungfujam、どの部分を違反とみなしますか?kフォールドは、特定の割合の異なるグループを特に必要とする場合を除き、ランダム化されます。各グループからフォールドをランダムに作成し、それらを1つの集約フォールドに結合することで、懸念しているランダム化を保持していると考えることができます。合理的なバランス(例:60%-40%)を考えると、階層化の有無にかかわらず、折り畳みの縦横比はほぼ同じになる可能性があります(もちろん、いくつかのバリエーション)。
cdeterman 14年

1
私はそれがポイントを打ち負かすように感じます。元のサンプルは「ランダム」です。そのため、CVはこれを試行し、さまざまなリサンプルを生成し、入力データの変化に応じて変化するモデルにペナルティを課すことで、分散に対してより堅牢なモデルを生成することになります。元のサンプルの比率に一致するように折り目を制限すると、ある意味でそれをやめようとしているように感じました。バイアスの低いモデルを作成することもできますが、分散が大きくなると考えられます。
ジェームズOwers 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.