Аппроксимация
Базовые аппроксиматоры
- class miptlabs.approximators.Polynomial(deg=1, points=100, left_offset=5, right_offset=5)[исходный код]
Базовые классы:
miptlabs.approximators.base.ApproximatorАппроксимация с помощью полинома. Использует numpy.polyfit
- Параметры
deg – степень апроскимируещего полинома
points – количество точек, которые будут на выходе
left_offset – отступ от левой гриницы диапозона
right_offset – отступ от правой гриницы диапозона
- approximate(x, y, xerr=0, yerr=0)[исходный код]
Функция апроксимации
- Параметры
x – набор параметров оси x
y – набор параметров оси y
xerr – погрешность параметров оси x
yerr – погрешность параметров оси y
- Результат
набор точек на кривой апроксимации
- label(xvar='x', yvar='y')[исходный код]
Генерирует формулу для латеха
- Параметры
xvar – буква перемонной по оси x
yvar – буква перемонной по оси y
- Результат
сгенерированная формулу
- class miptlabs.approximators.Functional(function, points=100, left_offset=5, right_offset=5)[исходный код]
Базовые классы:
miptlabs.approximators.base.ApproximatorАппроксимация с помощью пользовательской функции. Использует scipy.optimize.curve_fit
Функция должна иметь следующую сигнатуру:
def function_for_fit(x, param1, param2, ..., paramn): ...
x - переменная
param1, param2, …, paramn - параметры, которые будут искаться
Например:
def exp(x, a, b, c): return a * np.exp(b * x) + c
У этой функции будут определяться параметры a, b, c
- Параметры
function – функция для аппроксимации
points – количество точек, которые будут на выходе
left_offset – отступ от левой границы диапазона
right_offset – отступ от правой границы диапазона
- approximate(x, y, xerr=None, yerr=None)[исходный код]
Функция апроксимации
- Параметры
x – набор параметров оси x
y – набор параметров оси y
xerr – погрешность параметров оси x
yerr – погрешность параметров оси y
- Результат
набор точек на кривой апроксимации
- label(xvar='x', yvar='y')[исходный код]
Генерирует формулу для латеха
- Параметры
xvar – буква перемонной по оси x
yvar – буква перемонной по оси y
- Результат
сгенерированная формулу
Специальные аппроксиматоры
- class miptlabs.approximators.Linear(points=100, left_offset=5, right_offset=5, no_bias=False)[исходный код]
Базовые классы:
miptlabs.approximators.base.PolynomialАппроксимация с помощью прямой y=kx+b. Использует numpy.polyfit
- Параметры
points – количество точек, которые будут на выходе
left_offset – отступ от правой границы диапазона
right_offset – отступ, то свободного коэффициента нет, иначе есть
no_bias – Если True от левой границы диапазона
- approximate(x, y, xerr=0, yerr=0)[исходный код]
Функция апроксимации
- Параметры
x – набор параметров оси x
y – набор параметров оси y
xerr – погрешность параметров оси x
yerr – погрешность параметров оси y
- Результат
набор точек на кривой апроксимации
- label(xvar='x', yvar='y')[исходный код]
Генерирует формулу для латеха
- Параметры
xvar – буква перемонной по оси x
yvar – буква перемонной по оси y
- Результат
сгенерированная формулу
- class miptlabs.approximators.Exponential(points=100, left_offset=5, right_offset=5)[исходный код]
Базовые классы:
miptlabs.approximators.base.FunctionalЭкспоненциальный апроксиматор y = a*exp(bx)+c
- Параметры
points – количество точек, которые будут на выходе
left_offset – отступ от правой границы диапазона
right_offset – отступ, то свободного коэффициента нет, иначе есть
- label(xvar='x', yvar='y')[исходный код]
Генерирует формулу для латеха
- Параметры
xvar – буква перемонной по оси x
yvar – буква перемонной по оси y
- Результат
сгенерированная формулу
- class miptlabs.approximators.Logarithmic(points=100, left_offset=5, right_offset=5)[исходный код]
Базовые классы:
miptlabs.approximators.base.FunctionalЛогарифмический апроксиматор y = a * ln(bx + c) + d
- Параметры
points – количество точек, которые будут на выходе
left_offset – отступ от правой границы диапазона
right_offset – отступ, то свободного коэффициента нет, иначе есть
- label(xvar='x', yvar='y')[исходный код]
Генерирует формулу для латеха
- Параметры
xvar – буква перемонной по оси x
yvar – буква перемонной по оси y
- Результат
сгенерированная формулу
Экспериментальные аппроксиматоры
- class miptlabs.approximators.Lowess(frac=0.35, points=100, left_offset=5, right_offset=5)[исходный код]
Базовые классы:
miptlabs.approximators.base.MultiLinearMixin,miptlabs.approximators.base.ApproximatorРеализует алгоритм lowess. Предоставляет общий и гибкий подход для приближения двумерных данных. Подробнее
Для некоторых наборов данных оченб хорошо апроксимирует кривую
- Параметры
frac – Параметр f указывает, какая доля (fraction) данных используется в процедуре. Если f = 0.5, то только половина данных используется для оценки и влияет на результат, и тогда мы получим умеренное сглаживание. С другой стороны, если f = 0.8, то используются восемьдесят процентов данных, и сглаживание намного сильнее. Во всех случаях веса данных тем больше, чем они ближе к объекту t. Процедура оценки использует не метод наименьших квадратов, а более устойчивый ( робастный ) метод, который принимает меры против выбросов.
points – количество точек, которые будут на выходе
left_offset – отступ от левой гриницы диапозона
right_offset – отступ от правой гриницы диапозона
- approximate(x, y, xerr=0, yerr=0)[исходный код]
Функция апроксимации
- Параметры
x – набор параметров оси x
y – набор параметров оси y
xerr – погрешность параметров оси x
yerr – погрешность параметров оси y
- Результат
набор точек на кривой апроксимации
- class miptlabs.approximators.Fourier(*args, **kwargs)[исходный код]
Базовые классы:
miptlabs.approximators.base.MultiLinearMixin,miptlabs.approximators.base.Approximator# WIP #
Апроксимация функции с помощью преобразования фурье
- approximate(x, y, xerr=0, yerr=0)[исходный код]
Функция апроксимации
- Параметры
x – набор параметров оси x
y – набор параметров оси y
xerr – погрешность параметров оси x
yerr – погрешность параметров оси y
- Результат
набор точек на кривой апроксимации
Собственный аппроксиматор
- class miptlabs.approximators.base.Approximator(points=100, left_offset=5, right_offset=5)[исходный код]
Базовые классы:
objectБазовый класс апроксиматор.
Классы нужны, чтобы сохранять разные данные, во время аппроксимации. Например коэффициенты, ошибки. Возможно когда-нибудь будет сделан класс для результата аппроксимации
Для некоторых позволяют генерировать формулу в латехе
- approximate(x, y, xerr=0, yerr=0)[исходный код]
Функция апроксимации
- Параметры
x – набор параметров оси x
y – набор параметров оси y
xerr – погрешность параметров оси x
yerr – погрешность параметров оси y
- Результат
набор точек на кривой апроксимации
- calc_hi_square()[исходный код]
Вычисляет chi^2
- calc_quality_of_approximation()[исходный код]
Вычисляет chi^2 / (n - p)
n - количество точек в данных
p - количество степеней свободы (кол-во параметров в функции, которой аппроксимируем)
- gen_x_axis(start, end)[исходный код]
Генерирует набор точек по оси абсцисс в заданом диапозоне :param start: начало диапозона :param end: конец диапозона :return:
- get_function()[исходный код]
Возвращает полученную после аппроксимации функцию
- is_approximation_good()[исходный код]
Делает оценочное суждение по поводу качества измерений
quality_of_approximation = calc_quality_of_approximation = chi^2 / (n - p)
0 < quality_of_approximation <= 0.5:
Качество ваших измерений составляется quality_of_approximation <= 0.5.
Это слишком мало, скорее всего это свидетельствуют о завышенных погрешностях
0.5 < quality_of_approximation < 2:
Качество ваших измерений составляется quality_of_approximation ~ 1.
Это хороший результат. Ваша теоретическая модель хорошо сходится с экспериментом.
2 <= quality_of_approximation:
Качество ваших измерений составляется quality_of_approximation >= 2.
Это слишком много. Это свидетельствуют либо о плохом соответствии теории и результатов измерений, либо о заниженных погрешностях.
- label(xvar='x', yvar='y')[исходный код]
Генерирует формулу для латеха
- Параметры
xvar – буква перемонной по оси x
yvar – буква перемонной по оси y
- Результат
сгенерированная формулу
- class miptlabs.approximators.base.MultiLinearMixin(*args, **kwargs)[исходный код]
Базовые классы:
objectДобавляет возможность получить функции, которая считает значения между двумя точками на прямой в результирующей аппроксимации
Полезно для аппроксиматоров, которые только двигают точки, например Lowess
- get_function()[исходный код]
Использование
Аппроксиматоры можно использовать сами по себе
from miptlabs.approximators import Approximator
apr = Approximator()
# x, y - какой-то набор данных
x_, y_ = apr.approximate(x, y)
x_, y_ - аппроксимирующая кривая
Для некоторых аппроксиматоров определен метод label(), который генерирует аппроксимирующую формулу.
label = apr.label()
Так же аппросиматоры можно использовать совместно с рисованием графика
from miptlabs.approximators import Approximator
from miptlabs.plotter import pretty_plot
apr = Approximator()
pretty_plot(x, y, approximator=apr)
Из apr так же можно вытащить label
Во всех аппроксиматорах есть атрибуты koefs и sigmas
В koefs записываются подогнанные коэффициенты, а в sigmas - стандартные отклонения этих коэффициентов.
Почти все аппроксиматоры умеют считать sigmas, кроме Lowess и Fourier.