Я пытаюсь оценить общую сумму результатов для запросов движка приложений, которые возвратят большие объемы результатов.Оценка количества результатов в Google App Engine Query
Для этого я назначил случайное число с плавающей запятой между 0 и 1 для каждого объекта. Тогда я выполнил запрос, для которого я хотел оценить общие результаты со следующими 3 параметрами:
* I ordered by the random numbers that I had assigned in ascending order * I set the offset to 1000 * I fetched only one entity
Я тогда подключен случайным значения сущностей в том, что я назначенный для этой цели в следующем уравнение для оценки общих результатов (так как я использовал 1000 в качестве смещения выше, значение OFFSET будет 1000 в данном случае):
1/RANDOM * OFFSET
идея заключается в том, что, поскольку каждый объект имеет случайный номер, присвоенный ей, и я сортировкой тем случайное число, присвоение случайного числа объекта должно быть пропорционально началу и концу результатов относительно его выключения (в данном случае 1000).
Проблема, которую я испытываю, заключается в том, что результаты, которые я получаю, дают мне низкие оценки. И оценки ниже, чем меньше смещение. Я ожидал, что чем ниже смещение, которое я использовал, тем менее точна оценка, но я думал, что погрешность будет выше и ниже фактического количества результатов.
Ниже приведена диаграмма, демонстрирующая то, о чем я говорю. Как вы можете видеть, прогнозы становятся более последовательными (точными), поскольку смещение увеличивается с 1000 до 5000. Но тогда предсказания предсказуемо следуют за 4-частным полиномом. (y = -5E-15x4 + 7E-10x3 - 3E-05x2 + 0,3781x + 51608).
Я делаю ошибку здесь, или стандартный генератор случайных чисел python не распределяет числа, достаточно равномерно для этой цели?
Спасибо!
Edit:
Оказывается, что эта проблема из-за моей ошибки. В другой части программы я захватывал объекты с начала серии, выполнял операцию, а затем повторно назначал случайное число. Это привело к более плотному распределению случайных чисел к концу.
Я немного углубился в эту концепцию, исправил проблему и снова попробовал ее по другому запросу (поэтому число результатов отличается от предыдущего). Я обнаружил, что эту идею можно использовать для оценки общих результатов для запроса. Следует отметить, что «ошибка» очень похожа на смещения, близкие друг к другу. Когда я сделал диаграмму рассеяния в excel, я ожидал, что точность прогнозов при каждом смещении будет «облачной». Это означает, что смещения при самом попрошайничестве приведут к появлению большего, менее плотного облака, которое сходится к очень маленькому, плотному, вокруг фактического значения, поскольку смещения становятся больше. Это не то, что произошло, как вы можете видеть ниже в тележке о том, насколько далеко предсказания были при каждом смещении. Где я думал, что будет облако точек, вместо этого есть строка.
Это график максимума после каждого смещения.Например, максимальная ошибка для любого смещения после 10000 составляло менее 1%:
Отличный вопрос! Я сам обдумывал это. Вы пробовали это на нескольких разных наборах данных? Возможно ли, что это просто случайность, что этот конкретный набор данных приводит к недооценке? –
Эй, Ник, я смущен, чтобы сказать, что я уверен, что проблема в том, что я забыл о другой операции, которую я делал, отсортированной по случайному числу, а затем измененных записей с самого начала. Поэтому в основном я сделал случайные числа менее случайными. Я попытаюсь исправить это в ближайшее время, а затем посмотреть, насколько точны результаты. –
Doh!Да, это, вероятно, объяснит это. И это хорошее предостережение для тех, кто использует тот же подход. –