バイナリラベル(簡単にするため、同義語は使用しない)のスコアリストがあり、ラベルを使用して、動作特性(ROC)曲線。 n個のスコアの集合については、この計算はO(n log n)時間で簡単に行うことができます。単純にリストをソートし、並べ替えられた順にリストをトラバースし、今まで見たことがあります。ネガティブラベルが表示されるたびに、ポジティブ数を追加し、最後にポジティブ数×ネガティブ数の積で除算します。1つのラベルが変更されたときにROCの領域を効率的に再計算する
この計算を実行したところ、誰かが来て、1つのラベル(正から負またはその逆)をちょうど反転させているとします。スコアそのものは変更されないので、並べ替える必要はありません。ソートされたリストを再トラバースすることによって、O(n)時間内の曲線下の新しい領域(AUC)を計算するのは簡単です。私の質問は、新しいAUCをO(n)よりも優れたもので計算することが可能なのでしょうか?つまり、新しいAUCを取得するためにソートされたリスト全体を再トラバースする必要がありますか?
私は、ランク付けされたリストの各位置で、この位置より上のポジティブとネガティブの数にカウントを格納することによって、O(1)時間で再計算を行うことができると思います。しかし、より多くのラベルが反転するにつれ、AUCを繰り返し計算する必要があります。そして、もし私がそれらの記憶された値に頼ると、次回の更新はO(n)になります。
私は同意する傾向があります。変更されたラベルの後に来る曲線内のすべての点の位置は異なるので、ここではO(n)以下で改善する方法はわかりません。しかし、私は間違っていると証明されてうれしい... – Nicolas78