как прогнозировать качество данных? - PullRequest
0 голосов
/ 07 июня 2011

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

Вот еще немного информации, чтобы прояснить ситуацию. Например, у меня есть следующее:

color  value   quantity
red       20    2
blue    5   8
green   10  2

total       100

Если дано только значение и сумма, я найду 36 возможных ответов:

#1 Found : 20.0*0.0 red + 5.0*0.0 blue + 10.0*10.0 green = 100.0
#2 Found : 20.0*0.0 red + 5.0*2.0 blue + 10.0*9.0 green = 100.0
#3 Found : 20.0*0.0 red + 5.0*4.0 blue + 10.0*8.0 green = 100.0
#4 Found : 20.0*0.0 red + 5.0*6.0 blue + 10.0*7.0 green = 100.0
#5 Found : 20.0*0.0 red + 5.0*8.0 blue + 10.0*6.0 green = 100.0
#6 Found : 20.0*0.0 red + 5.0*10.0 blue + 10.0*5.0 green = 100.0
#7 Found : 20.0*0.0 red + 5.0*12.0 blue + 10.0*4.0 green = 100.0
#8 Found : 20.0*0.0 red + 5.0*14.0 blue + 10.0*3.0 green = 100.0
#9 Found : 20.0*0.0 red + 5.0*16.0 blue + 10.0*2.0 green = 100.0
#10 Found : 20.0*0.0 red + 5.0*18.0 blue + 10.0*1.0 green = 100.0
#11 Found : 20.0*0.0 red + 5.0*20.0 blue + 10.0*0.0 green = 100.0
#12 Found : 20.0*1.0 red + 5.0*0.0 blue + 10.0*8.0 green = 100.0
#13 Found : 20.0*1.0 red + 5.0*2.0 blue + 10.0*7.0 green = 100.0
#14 Found : 20.0*1.0 red + 5.0*4.0 blue + 10.0*6.0 green = 100.0
#15 Found : 20.0*1.0 red + 5.0*6.0 blue + 10.0*5.0 green = 100.0
#16 Found : 20.0*1.0 red + 5.0*8.0 blue + 10.0*4.0 green = 100.0
#17 Found : 20.0*1.0 red + 5.0*10.0 blue + 10.0*3.0 green = 100.0
#18 Found : 20.0*1.0 red + 5.0*12.0 blue + 10.0*2.0 green = 100.0
#19 Found : 20.0*1.0 red + 5.0*14.0 blue + 10.0*1.0 green = 100.0
#20 Found : 20.0*1.0 red + 5.0*16.0 blue + 10.0*0.0 green = 100.0
#21 Found : 20.0*2.0 red + 5.0*0.0 blue + 10.0*6.0 green = 100.0
#22 Found : 20.0*2.0 red + 5.0*2.0 blue + 10.0*5.0 green = 100.0
#23 Found : 20.0*2.0 red + 5.0*4.0 blue + 10.0*4.0 green = 100.0
#24 Found : 20.0*2.0 red + 5.0*6.0 blue + 10.0*3.0 green = 100.0
#25 Found : 20.0*2.0 red + 5.0*8.0 blue + 10.0*2.0 green = 100.0
#26 Found : 20.0*2.0 red + 5.0*10.0 blue + 10.0*1.0 green = 100.0
#27 Found : 20.0*2.0 red + 5.0*12.0 blue + 10.0*0.0 green = 100.0
#28 Found : 20.0*3.0 red + 5.0*0.0 blue + 10.0*4.0 green = 100.0
#29 Found : 20.0*3.0 red + 5.0*2.0 blue + 10.0*3.0 green = 100.0
#30 Found : 20.0*3.0 red + 5.0*4.0 blue + 10.0*2.0 green = 100.0
#31 Found : 20.0*3.0 red + 5.0*6.0 blue + 10.0*1.0 green = 100.0
#32 Found : 20.0*3.0 red + 5.0*8.0 blue + 10.0*0.0 green = 100.0
#33 Found : 20.0*4.0 red + 5.0*0.0 blue + 10.0*2.0 green = 100.0
#34 Found : 20.0*4.0 red + 5.0*2.0 blue + 10.0*1.0 green = 100.0
#35 Found : 20.0*4.0 red + 5.0*4.0 blue + 10.0*0.0 green = 100.0
#36 Found : 20.0*5.0 red + 5.0*0.0 blue + 10.0*0.0 green = 100.0

Как видите, в возможностях я получаю правильный ответ, но также и многие другие ответы. Теперь скажите, что я добавляю еще один красный (так что общий красный равен 3), тогда у меня теперь 49 результатов, но некоторые результаты во втором наборе маловероятны, если вы учитываете связь с первым набором результатов. Я предполагаю, что, получая больше данных, я могу более точно удалить результаты, которые не работают.

Я пытаюсь выяснить, есть ли какое-либо исследование или стандартный подход к сужению результатов до чего-то более значимого. Я не уверен на 100%, но я подумал, что, может быть, Google может быть примером этого, так как каждый запрос выполняется не только по данным, но и по вашей истории (у меня есть веб-сайт с очень низким рейтингом, и когда я нажимал на него, а затем выполнял поиск для этого снова это всегда идет сверху .. но когда я ищу на компьютере моих друзей, тот же самый сайт обнаруживается внизу). Я подумал, что, возможно, благодаря тому, как Google строит отношения с нашими многочисленными поисковыми запросами, я мог бы использовать аналогичный подход, чтобы удалить результаты из моих данных выше, которые были неверны.

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

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 07 июня 2011

Если я правильно понял, вы решаете уравнения, подобные этому, для

R*r + G*g + B*b = 100

Для заданных целочисленных значений R, G, B и с ограничением, что r, g, b также являются целочисленными значениями.

Поскольку у вас есть только одно уравнение и 3 переменные, вы получаете пространство решения вместо одного решения и теперь хотите применить некоторый алгоритм для выбора правильного или лучшего

Похоже, у вас также есть значения r0, g0, b0, которые являются вероятными значениями для r, g и b?!

Что вам нужно придумать, так это функция фитнеса, которая говорит вам, насколько хорош или плох ваш вариант решения.

Один из примеров может быть (более низкие значения означают лучшее решение)

(r-r0)^2 +(g-g0)^2 +(b-b0)^2 

Что в основном говорит о том, что решение лучше, когда оно ближе к вероятным значениям.

Вариант может быть

(r-r0)^2 +(g-g0)^2 +(b-b0)^2 + c*C

Где C - это постоянная, которую вы выбираете, а c - число значений, которые отличаются от вашего вероятного решения. Это дало бы более высокую пригодность для кандидата, который изменяет только одно значение по сравнению с одним изменяющим два или три значения.

Если у вас есть функция фитнеса, выберите решение с наименьшей пригодностью.

0 голосов
/ 07 июня 2011

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

...