Сравните 2 списка цветов (несортированные и разной длины) - PullRequest
0 голосов
/ 03 июля 2019

У меня есть задача, которая действительно ставит меня в тупик.Я разработал алгоритм, который сортирует цвета по бинам / подгруппам.Я хочу оценить, насколько хорошо это работает по сравнению с человеческой интуицией .Итак, я создал несколько списков цветов (мои данные) и вручную просмотрел их и отсортировал по бинам / подгруппам того, как, по моему мнению, алгоритм должен сортировать цвета (мои основные истины).Затем я подаю эти алгоритмы те же списки цветов (мои данные) и сравниваю их сортировку с моими основными истинами.

В этом и заключается моя проблема.Я не знаю, как лучше сравнить основную правду с результатами, чтобы оценить, насколько хорошо работает алгоритм.Кто-нибудь может дать совет, как сравнить 2 списка цветов?

Ниже приведен пример истинности и результата алгоритма.Мне нужно сравнить эти 2 разных списка цветов, чтобы увидеть, насколько близок результат к основной истине (левый). Как видите;количество бинов изменяется, длина каждого бина является переменной, а порядок цветов в каждом бине - переменным.Единственной константой является то, что оба списка всегда будут иметь одинаковое количество цветов (они будут отсортированы по-разному). Так вот почему так сложно (по крайней мере, мне) понять, как их сравнивать.

enter image description here

Пример входных данных, т. Е. Простой список цветов, который подается в сортировщик цветов:

[[69,99121], [59,91,103], [71107140], [97132162], [85117141], [94136153], [86131144], [65,99,118], [211214201], [204204191], [203207188], [215216203], [194199180], [222215200], [219213195], [214206191], [197188172], [186177160], [206197181], [206196183], [38,35,31], [5,5,12], [31,34,41], [42,39,34], [30,32,27], [12,8,9]]

Пример вывода из сортировщика цвета (цвета выше)были отсортированы по 4 лоткам / подгруппам):

[[[69,99,121], [59,91,103], [71,107,140], [97,132,162], [85,117,141], [94,136,153], [86,131,144], [65,99,118]], [[211,214,201], [204,204,191], [203,207,188], [215,216,203], [194,199,180]], [[222,215,200], [219,213,195], [214,206,191], [197,188,172], [186,177,160], [206,197,181], [206,196,183]], [[38,35,31], [5,5,12], [31,34,41], [42,39,34], [30,32,27], [12,8,9]]]

Примечание: я могу легко изменить форматотсортированные цвета к чему-то другому (например, крошечный массив или гистограмма), если вы думаете, что это будет легче сравнивать.Обратите внимание, что с гистограммой число бинов должно быть одинаковым для каждого, поэтому мне, вероятно, нужно заполнить один из списков.

Как я могу сравнить эти 2 списка Python, когда подсписокпорядок не имеет большого значения, а длина подсписка настолько изменчива?

Редактировать Разъяснение проблемы: Я думаю, что решение для сравнения бинов решено (см. код ниже),Проблема состоит в том, как узнать, какое мусорное ведро из наземной истины сравнить с каким мусорным ведром из результатов.Например, на приведенном выше изображении мне нужно сравнить ячейку 2 из истинного положения (слева) с ячейкой 1 из результатов (справа), то есть сравнить оранжевые ячейки из каждого из них.Кроме того, проблема возникает, когда нет результатов для сравнения с основной истиной.

def validator(result_bin, ground_truth_bin):
    # todo: padd the shorter bin with black values so each is the same length
    dists = cdist(result_bin, ground_truth_bin, 'euclidean')
    correct_guesses = np.sum(dists<25, axis=1)
    score = float(len(correct_guesses)) / len(ground_truth_bin)
    return score

1 Ответ

0 голосов
/ 03 июля 2019

RGB - очень неподходящее представление о человеческом восприятии цвета.

Конвертировать в HSV или Lab .Тогда вы можете использовать, например, косинусное сходство для каждой пары цветов.

Поскольку ваши списки имеют разную длину, поиск пар для сравнения может быть выполнен разными способами.Я могу предложить несколько.

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

  • Для каждого цвета в более коротком списке найдите ближайший цвет в более длинном списке, измерьте разницу, как указано выше, и удалите ихиз длинного списка.Теперь у вас есть два списка снова, повторите процесс.Теперь у вас есть список различий;усредните его по числу прогонов (среднее арифметическое или геометрическое).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...