Аппроксимация

Базовые аппроксиматоры

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.