2010-12-02 7 views
2

私は、2つの異なる分類システム(機械学習アルゴリズムに基づくものと人間によるグランドトラストに基づくもの)の間の一致を測定しようとしています。同じような種類のシステムを実装している人からの入力を探しています。ランクオーダーリスト間のエラーレートを測定する

分類スキーマは、各分類項目が重み付け係数を運ぶカテゴリ分類法において、各項目を複数の異なるノードに分類することを可能にする。例えば、いくつかの項目は、4つの異なる分類ノードに分類することができれば、結果は、アルゴリズムと地上真実分類のために次のようになります。

   ALGO TRUTH 
CATEGORY A:  0.35  0.50 
CATEGORY B:  0.30  0.30 
CATEGORY C:  0.25  0.15 
CATEGORY D:  0.10  0.05 

重みは、常にすべての選択のために、正確に1.0まで追加されます分類ノード(そのうちの約200個は分類分類にある)。

上記の例では、両方のリストがランクオーダー(ABCD)について合意していることに注意することが重要です。したがって、互いに強く合意しているとスコア付けする必要があります(それぞれに割り当てられたウェイトカテゴリ対照的に、次の例では、2つの分類は、次のランク付けに関しては完全に不一致である:。。

   ALGO TRUTH 
CATEGORY A:  0.40  0.10 
CATEGORY B:  0.35  0.15 
CATEGORY C:  0.15  0.35 
CATEGORY D:  0.10  0.40 

したがって、このような結果は非常に低いスコアを取得する必要があります

最後にもう一つの例人間が生成した地上真理に重複重複値が含まれている一般的なケースを示しています。

   ALGO TRUTH 
CATEGORY A:  0.40  0.50 
CATEGORY B:  0.35  0.50 
CATEGORY C:  0.15  0.00 
CATEGORY D:  0.10  0.00 

だから、(グランドトゥルースが有効にABCD、ABDC、BACD、またはBADCとして解釈される可能性があるため)アルゴリズムは、完全な順位の順序なしリストを可能にすることが重要です

私がこれまで試したスタッフ:

  • Root Mean Squared Error (RMSE):非常に問題があります。ランクオーダー契約は考慮されていません。これは、リストの一番上にあるカテゴリ間の総不一致が、リストの一番下にあるカテゴリについての合意によってラグの下で払われることを意味します。

  • Spearman's Rank Correlation:これは、ランクの違いを説明していますが、リストの最上位と最下位のランク契約に同じ重みを与えます。高レベルの不一致がエラーメトリックに寄与している限り、私は低レベルの不一致についてはあまり気にしません。また、複数のカテゴリが同値のランクを持つケースも処理しません。

  • Kendall Tau Rank Correlation Coefficient:Spearmanのランク相関と同じ基本的な特性と制限があります。

私は自分のアドホックメトリックを転がりについて考えてきたが、私には数学者だので、私は自分自身の小さなメトリックがはるかに厳格な価値を提供するかどうかの不審なことでしょう。この種の標準的な方法論があれば、私はむしろそれを使用したいと思います。

アイデア?

+0

ここに加えて[CrossValidated](http://stats.stackexchange.com/)でこれを尋ねるのは間違いありません。 – walkytalky

+0

マジックナンバーを定義する方法はたくさんありますが、あなたが何を達成しようとしているのか、どのように番号を使用するのか分からない限りは、賢明に定義する方法はありません。 –

+0

RMSEは除外できますが、理由はありません。 2つの確率の差の2乗は、単に合理的な意味を持たない。 RMSEは、数値がガウス分散ノイズを持つ測定値である場合に意味があります。 –

答えて

1

さて、私は、重み付けされたRMSEを実装することに決めました。 順位付け関係を考慮していませんが、重み付けシステムは自動的にリストの先頭にある項目を強調します。

RMSE Equation http://benjismith.net/images/rmse.png

だけレビューのために(RMSEに慣れていない人にとっては)、式は、二つの異なる分類器Aと、その結果、同じ名前の配列に含まれるBを想定し、このようになります

javaでは、実装は次のようになります。

double[] A = getAFromSomewhere(); 
double[] B = getBFromSomewhere(); 

// Assumes that A and B have the same length. If not, your classifier is broken. 
int count = A.length; 

double sumSquaredError = 0; 
for (int i = 0; i < count; i++) { 
    double aElement = A[i]; 
    double bElement = B[i]; 
    double error = aElement - bElement; 
    double squaredError = error * error; 
    sumSquaredError += squaredError; 
} 
double meanSquaredError = sumSquaredError/count; 
double rootMeanSquaredError = Math.sqrt(meanSquaredError); 

これは私の変更された実装の出発点です。私は2つの値(両方の分類子からの)の合計の大きさを説明する重み付けシステムを考え出す必要がありました。だから私は平方ユークリッド距離関数であるSQRT(Ai^2 + Bi^2)で各二乗誤差の値を掛けます。

もちろん、私は分子の重み付き誤差を使うので、分母のすべての重みの合計も使用する必要があります。結果は(0.0,1.0)の範囲に再正規化されます。

それは二乗平均加重二乗誤差ですので、私は、新しいメトリック「RMW​​SE」と呼んでいます。

RMWSE Equation http://benjismith.net/images/rmwse.png

そして、ここではそれがJavaで次のようになります:

double[] A = getAFromSomewhere(); 
double[] B = getBFromSomewhere(); 

// Assumes that A and B have the same length. If not, your classifier is broken. 
int count = A.length; 

double sumWeightedSquaredError = 0; 
double sumWeights = 0; 
for (int i = 0; i < count; i++) { 
    double aElement = A[i]; 
    double bElement = B[i]; 
    double error = aElement - bElement; 
    double squaredError = error * error; 
    double weight = Math.sqrt((aElement * aElement) + (bElement * bElement)); 
    double weightedSquaredError = weight * squaredError; 
    sumWeightedSquaredError += weightedSquaredError; 
    sumWeights += weight; 
} 
double meanWeightedSquaredError = sumWeightedSquaredError/sumWeights; 
double rootMeanWeightedSquaredError = Math.sqrt(meanWeightedSquaredError); 

あなたにこの重量は実際にどのように機能するか、のは私の2を言わせためのアイデアを与えるためにここに新しい方程式は次のようになります。いくつかのカテゴリの値は0.950.85です。これらの2つの値の誤差は0.10ですが、重みは1.2748です(これはSQRT(0.95^2 + 0.85^2)を使用して到着しました)。加重誤差は0.12748です。分類は、他のいくつかのカテゴリに0.450.35を作る場合

は同様に、エラーがまだちょうど0.10ですが、重量はわずか0.5701で、重み付き誤差がゆえだけ0.05701です。

両方のクラシファイアの値が高いカテゴリは、単一のクラシファイアだけの値が高いカテゴリ、または両方のクラシファイアの値が低いカテゴリよりも重く重くなります。

これは、分類値が再正規化され、AとBの両方の最大値が1.0になり、他のすべての値が比例してスケールアップされるときに最も効果的です。その結果、次元は特定の分類子では1.0までの合計がなくなりましたが、何も役に立たないためにそのプロパティを悪用していなかったので、それは本当に問題ではありません。

これは私のデータセットで得られている結果に奇妙なことですが、誰かが改善のための他のアイデアを持っていれば、私は完全に示唆に満ちています!

1

私はあなたがこの厳しさを心配する必要はないと思います。あなたが特定の種類の合意を他のものよりも重くしたいのであれば、それは完全に合法です。

たとえば、上位kカテゴリのSpearmanのみを計算します。私はあなたが完全に正当な答えを得なければならないと思います。

また、データセットの「重要」な部分(分散、差異など)を保存しながら、すべてを[0,1]にマップすることもできます。次に、利用可能な多数の仮説検定関数の利点。

(注意点として、あなたはネクタイを説明するためにスピアマンを変更することができます。Wikipediaを参照してください。)

+0

私が敬愛するベイジアンであることから、「仮説検定」という言葉が見えるときはいつも怖がっています。 –

関連する問題