Лучший способ рассчитать точность и показать значимые результаты - PullRequest
0 голосов
/ 15 января 2010

Мой текущий метод позволяет мне определить наиболее точный массив, но я не могу найти хороший способ отобразить информативные результаты.

Вот моя ситуация ...

Я сравниваю X количество целочисленных массивов с статическим целочисленным массивом. Для каждой позиции в массиве я вычисляю точность позиции результат, сравнивая с эквивалентной позицией в статическом массиве. После определения результата точности последнего положения массива я сохраняю сумму всех результатов точности для этого массива для последующего сравнения .

Как только сумма каждого массива всех результатов точности сохранена, они сравниваются друг с другом. Массив с наименьшей суммой считается наиболее точным .

Псевдокод ...

foreach (ComparableArray as SingleArray) {
    for (i = 0; i < count(SingleArray); i++) {
        AccuracyResults[SingleArray] += |StaticArray[i] - SingleArray[i]| / CONSTANT;
    }   
}   
BestArray = AscendingSort(AccuracyResults)[0];

Точность определяется путем взятия абсолютного значения разности значения SingleArray из StaticArray и деления на некоторую константу. Если точность результат <1 </strong>, то результат считается точным. Если результат> 1 , то он неточен и results = 0 идеально.

Вот сценарий ... давайте для простоты воспользуемся двумя массивами

S = [56, 53, 50, 64]

A = [56, 54, 52, 64]

B = [54, 52, 51, 63]

Цикл каждого массива, начинающийся с A .

Сравните точность [1] для A ( 56 ) и S ( 56 ) для точности. Определите точность (я буду использовать два для моей постоянной) | 56-56 | = 0 , 0 / 2 = 0 ; Идеальная точность

Продолжайте сравнивать каждую позицию и вычислять точность | 53-54 | = 1 , 1 / 2 = 0,5 ; Точность, потому что <= 1 </p>

| 50-52 | = 2 , 2 / 2 = 1 ; Точная

| 64-64 | = 0 ; Совершенная

Теперь вычислите сумму всех точных результатов для массива A 0 + 0,5 + 1 + 0 = 1,5

Если мы сделаем те же самые операции для массива B, конечный результат будет 1 + 0,5 + 0,5 + 0,5 = 2,5

Теперь, если мы сравним массив A с B, мы увидим, что массив A точнее , чем B, поскольку сумма ниже .

Проблема в 1,5 и 2,5 не очень значима, когда вы пытаетесь показать, насколько точнее А для B.

Какой будет лучший способ для отображения этих результатов? Я думал об отображении процентов ... например, A на 17% лучше, чем B. Или BestArray на 6% лучше, чем в среднем.

Как бы я вычислил эти результаты?

Видите ли вы какие-либо логические проблемы в моем способе вычисления точности или знаете лучший способ?

Спасибо за любые идеи, которые вы можете предоставить!

Ответы [ 4 ]

1 голос
/ 15 января 2010

Я склонен согласиться с @Martin, что использование числовых значений для количественной оценки разницы между качественными измерениями является немного хитрым. Тем не менее, люди делают это все время, так что если вы хотите продолжать делать это, продолжайте!

Теперь, что я действительно хотел написать, так это то, что ваш псевдокод совсем не так уж страшен. Вот псевдокод, который я бы написал:

ManhattanDistance[{56, 53, 50, 64},{56, 54, 52, 64}]

, который указывает тот же расчет, что и ваша версия. Теперь вы можете или не можете признать это как правильное утверждение Mathematica, но это не относится к делу. Дело в том, что вы нажали одну из множества функций для измерения расстояния между двумя векторами. Другие меры расстояния включают евклидово расстояние и расстояние от шахматной доски.

Вы также можете использовать любую из нескольких векторных норм для измерения расстояния между вашими векторами. Например, Mathematica дает результат sqrt (5) для вычисления:

Norm[S - A]

Итак, если вы хотите побаловать себя какой-нибудь изворотливой псевдостатистикой Google, найдите некоторые определения векторных расстояний и норм. Я думаю, вы найдете код или, по крайней мере, императивные алгоритмы тоже.

Привет

Mark

PS Не говорите никому, что я помог вам с лженаукой: -)

1 голос
/ 16 января 2010

Ваша "точность позиционирования" - это просто ошибка, которая, если ее нормально распределить (как можно было бы ожидать), можно смоделировать с помощью гауссовского распределения. Если это так, то поскольку суммы гауссовых случайных величин сами по себе являются гауссовыми, ваше число «сумма всей точности» также является гауссовой распределенной случайной величиной. Вы можете вычислить среднее значение и дисперсию этих сумм ошибок и получить гауссовский PDF (функция распределения вероятностей), моделирующий вашу систему, и использовать его для ответов на вопросы типа «этот последний неуклюжий вектор должен быть ярко-красным, потому что он имел сумму ошибок более 95% всех таких векторов ". Или «вау, что последний вектор был А +, потому что он имел ошибку менее 1% от всех других таких векторов».

Этот пост wiki тоже может помочь.

Пол

1 голос
/ 15 января 2010

Относительные проценты - плохая идея, потому что люди очень плохо оценивают, что это означает на практике - для более подробного объяснения см. Книгу «Плохая наука».

Просто отобразите суммы по порядку от наиболее точного к наименьшему и объясните рейтинг системы. Я не думаю, что превращение их в какой-либо процентный процент полезно, но было бы неплохо дать некоторые ориентировочные цифры или полосы (скажем, путем окрашивания текста или фона) о том, какой будет хорошая, средняя и низкая точность. 1003 *

Наконец, ваш вопрос очень специфичен для вашей программы и вряд ли будет полезен многим другим людям в том виде, как он сформулирован. Здесь мы предпочитаем, чтобы вопрос был конкретным в технической теме, но в целом применим к другим проблемам, поэтому, если вы в следующий раз сформулируете свои проблемы более широко, это приведет к улучшению ресурса.

0 голосов
/ 18 января 2010

Среднее квадратичное отклонение часто используется в инженерных кругах для количественной оценки ошибки между решением и оценкой решения.

Чтобы избежать проблем с большой дисперсией значений, рассмотрите возможность использования log (ошибка) ... конечно, у него есть свои проблемы: log (0) имеет значение -infinity, и если (0

...