несоответствие#
- 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
Расхождение.
Смотрите также
Примечания
Несогласованность — это критерий равномерности, используемый для оценки заполнения пространства несколькими выборками в гиперкубе. Несогласованность количественно определяет расстояние между непрерывным равномерным распределением на гиперкубе и дискретным равномерным распределением на \(n\) различные точки выборки.
Чем ниже значение, тем лучше покрытие пространства параметров.
Для набора подмножеств гиперкуба несоответствие — это разница между долей точек выборки в одном из этих подмножеств и объёмом этого подмножества. Существуют разные определения несоответствия, соответствующие разным наборам подмножеств. Некоторые версии берут среднеквадратичную разницу по подмножествам вместо максимума.
Мера однородности является разумной, если она удовлетворяет следующим критериям [1]:
Инвариантна относительно перестановки факторов и/или прогонов.
Он инвариантен относительно вращения координат.
Он может измерять не только равномерность выборки по гиперкубу, но и равномерность проекции выборки по непустым подмножествам гиперкубов меньшей размерности.
Есть некоторый разумный геометрический смысл.
Это легко вычислить.
Оно удовлетворяет неравенству, подобному неравенству Коксмы-Хлавки.
Он согласуется с другими критериями в планировании экспериментов.
Доступны четыре метода:
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