scipy.stats.qmc.

несоответствие#

scipy.stats.qmc.несоответствие(sample, *, итеративный=False, метод='CD', workers=1)[источник]#

Несогласованность заданной выборки.

Параметры:
samplearray_like (n, d)

Образец, от которого вычисляется расхождение.

итеративныйbool, необязательно

Должно быть False, если не используется для обновления несоответствия. По умолчанию False. Подробности см. в примечаниях.

методstr, optional

Тип несоответствия, может быть CD, WD, MD или L2-star. Обратитесь к примечаниям для более подробной информации. По умолчанию CD.

workersint, необязательный

Количество рабочих процессов для параллельной обработки. Если задано -1, используются все потоки CPU. По умолчанию 1.

Возвращает:
несоответствиеfloat

Расхождение.

Смотрите также

geometric_discrepancy

Примечания

Несогласованность — это критерий равномерности, используемый для оценки заполнения пространства несколькими выборками в гиперкубе. Несогласованность количественно определяет расстояние между непрерывным равномерным распределением на гиперкубе и дискретным равномерным распределением на \(n\) различные точки выборки.

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

Для набора подмножеств гиперкуба несоответствие — это разница между долей точек выборки в одном из этих подмножеств и объёмом этого подмножества. Существуют разные определения несоответствия, соответствующие разным наборам подмножеств. Некоторые версии берут среднеквадратичную разницу по подмножествам вместо максимума.

Мера однородности является разумной, если она удовлетворяет следующим критериям [1]:

  1. Инвариантна относительно перестановки факторов и/или прогонов.

  2. Он инвариантен относительно вращения координат.

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

  4. Есть некоторый разумный геометрический смысл.

  5. Это легко вычислить.

  6. Оно удовлетворяет неравенству, подобному неравенству Коксмы-Хлавки.

  7. Он согласуется с другими критериями в планировании экспериментов.

Доступны четыре метода:

  • CD: Центрированная несоответствие - подпространство включает угол гиперкуба

  • WD: Ошибка обёртки - подпространство может оборачиваться вокруг границ

  • MD: Несоответствие смеси - смесь между CD/WD, охватывающая больше критериев

  • L2-star: L2-star discrepancy - как CD, но вариант для вращения

Методы CD, WD, и MD реализуют правую часть уравнений 9, 10 и 18 из [2], соответственно; квадратный корень не извлекается. С другой стороны, L2-star вычисляет величину, заданную уравнением 10 из [3] как реализовано последующими уравнениями; извлекается квадратный корень.

Наконец, используя iterative=True, возможно вычислить несоответствие, как если бы у нас было \(n+1\) выборок. Это полезно, если мы хотим добавить точку к выборке и проверить кандидата, который даст наименьшую несоответствие. Тогда можно просто обновлять несоответствие с каждым кандидатом, используя update_discrepancy. Этот метод быстрее, чем вычисление несоответствия для большого числа кандидатов.

Ссылки

[1]

Fang et al. “Design and modeling for computer experiments”. Computer Science and Data Analysis Series, 2006.

[2]

Zhou Y.-D. et al. “Mixture discrepancy for quasi-random point sets.” Journal of Complexity, 29 (3-4) , pp. 283-301, 2013.

[3]

T. T. Warnock. “Computational investigations of low discrepancy point sets.” Applications of Number Theory to Numerical Analysis, Academic Press, pp. 319-343, 1972.

Примеры

Вычислить качество выборки с использованием несоответствия:

>>> import numpy as np
>>> from scipy.stats import qmc
>>> space = np.array([[1, 3], [2, 6], [3, 2], [4, 5], [5, 1], [6, 4]])
>>> l_bounds = [0.5, 0.5]
>>> u_bounds = [6.5, 6.5]
>>> space = qmc.scale(space, l_bounds, u_bounds, reverse=True)
>>> space
array([[0.08333333, 0.41666667],
       [0.25      , 0.91666667],
       [0.41666667, 0.25      ],
       [0.58333333, 0.75      ],
       [0.75      , 0.08333333],
       [0.91666667, 0.58333333]])
>>> qmc.discrepancy(space)
0.008142039609053464

Мы также можем вычислить итеративно CD расхождение с использованием iterative=True.

>>> disc_init = qmc.discrepancy(space[:-1], iterative=True)
>>> disc_init
0.04769081147119336
>>> qmc.update_discrepancy(space[-1], space[:-1], disc_init)
0.008142039609053513