Я не пробовал STLDecompose
, но я взглянул на него, и я считаю, что он использует лёсс общего назначения. Это трудно сделать правильно и имеет тенденцию быть неэффективным. См. Несуществующий STL-Java репо .
Пакет pyloess
предоставляет оболочку Python для того же базового Фортрана, который используется в исходной версии R. Вам определенно не нужно проходить через мост к R, чтобы получить такую же функциональность! Этот пакет активно не поддерживается, и у меня иногда возникали проблемы с его сборкой на некоторых платформах (таким образом, здесь разветвление). Но однажды построенный, он работает и является самым быстрым, который вы, вероятно, найдете. Я испытывал желание изменить его, чтобы включить некоторые новые функции, но просто не могу заставить себя модифицировать Fortran (который является предварительно обработанным RATFOR - очень ассемблерным языком, как Fortran, и я нигде не могу найти препроцессор RATFOR ).
Я написал нативную реализацию Java, stl-decomp-4j
, которую можно вызывать из python с помощью пакета pyjnius
. Это началось как прямой порт оригинального Fortran, подвергнутого рефакторингу в более современный стиль программирования. Затем я расширил его, чтобы разрешить квадратичную интерполяцию Лёсса и поддержать сглаживание сезонного компонента после разложения, особенности, которые описаны в исходной статье, но не были включены в реализацию Fortran / R. (По-видимому, они находятся в реализации S-plus
, но немногие из нас имеют к этому доступ.) Ключ к тому, чтобы сделать это эффективным, заключается в том, что сглаживание лесса упрощается, когда точки равноудалены, а сглаживание по точкам выполняется простым изменение весов, которые используются для интерполяции.
Примеры stl-decomp-4j
включают один блокнот Jupyter, демонстрирующий, как вызвать этот пакет из python. Я, вероятно, должен формализовать это как пакет python, но у меня не было времени. Вполне готов принять тянуть запросы. ; -) * 1 021 *
Я бы хотел увидеть прямой порт такого подхода к python / numpy. Еще одна вещь в моем списке «если бы у меня было немного свободного времени».