mirror of
https://github.com/saymrwulf/prophet.git
synced 2026-07-19 19:00:52 +00:00
Use fit kwargs in cross validation (#1040)
This commit is contained in:
parent
4fcecdb3df
commit
6e51130f28
7 changed files with 12 additions and 4 deletions
|
|
@ -117,7 +117,8 @@ cross_validation <- function(
|
|||
if (nrow(history.c) < 2) {
|
||||
stop('Less than two datapoints before cutoff. Increase initial window.')
|
||||
}
|
||||
m <- fit.prophet(m, history.c)
|
||||
fit.args <- c(list(m=m, df=history.c), model$fit.kwargs)
|
||||
m <- do.call(fit.prophet, fit.args)
|
||||
# Calculate yhat
|
||||
df.predict <- dplyr::filter(df, ds > cutoff, ds <= cutoff + horizon.dt)
|
||||
# Get the columns for the future dataframe
|
||||
|
|
|
|||
|
|
@ -134,7 +134,8 @@ prophet <- function(df = NULL,
|
|||
history.dates = NULL,
|
||||
train.holiday.names = NULL,
|
||||
train.component.cols = NULL,
|
||||
component.modes = NULL
|
||||
component.modes = NULL,
|
||||
fit.kwargs = list()
|
||||
)
|
||||
m <- validate_inputs(m)
|
||||
class(m) <- append("prophet", class(m))
|
||||
|
|
@ -1208,6 +1209,7 @@ fit.prophet <- function(m, df, ...) {
|
|||
component.cols <- out2$component.cols
|
||||
m$train.component.cols <- component.cols
|
||||
m$component.modes <- out2$modes
|
||||
m$fit.kwargs <- list(...)
|
||||
|
||||
m <- set_changepoints(m)
|
||||
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@ test_that("logistic_floor", {
|
|||
expect_true(m$logistic.floor)
|
||||
expect_true('floor' %in% colnames(m$history))
|
||||
expect_equal(m$history$y_scaled[1], 1., tolerance = 1e-6)
|
||||
expect_equal(m$fit.kwargs, list(algorithm = 'Newton'))
|
||||
fcst1 <- predict(m, future1)
|
||||
|
||||
m2 <- prophet(growth = 'logistic')
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ def cross_validation(model, horizon, period=None, initial=None):
|
|||
'Less than two datapoints before cutoff. '
|
||||
'Increase initial window.'
|
||||
)
|
||||
m.fit(history_c)
|
||||
m.fit(history_c, **model.fit_kwargs)
|
||||
# Calculate yhat
|
||||
index_predicted = (df['ds'] > cutoff) & (df['ds'] <= cutoff + horizon)
|
||||
# Get the columns for the future dataframe
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ from __future__ import absolute_import, division, print_function
|
|||
|
||||
import logging
|
||||
from collections import OrderedDict, defaultdict
|
||||
from copy import deepcopy
|
||||
from datetime import timedelta
|
||||
|
||||
import numpy as np
|
||||
|
|
@ -137,6 +138,7 @@ class Prophet(object):
|
|||
self.train_component_cols = None
|
||||
self.component_modes = None
|
||||
self.train_holiday_names = None
|
||||
self.fit_kwargs = {}
|
||||
self.validate_inputs()
|
||||
|
||||
def validate_inputs(self):
|
||||
|
|
@ -1080,6 +1082,7 @@ class Prophet(object):
|
|||
self.make_all_seasonality_features(history))
|
||||
self.train_component_cols = component_cols
|
||||
self.component_modes = modes
|
||||
self.fit_kwargs = deepcopy(kwargs)
|
||||
|
||||
self.set_changepoints()
|
||||
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ class TestDiagnostics(TestCase):
|
|||
df = self.__df.copy()
|
||||
for uncertainty in [0, False]:
|
||||
m = Prophet(uncertainty_samples=uncertainty)
|
||||
m.fit(df)
|
||||
m.fit(df, algorithm='Newton')
|
||||
df_cv = diagnostics.cross_validation(
|
||||
m, horizon='4 days', period='4 days', initial='115 days')
|
||||
expected_cols = ['ds', 'yhat', 'y', 'cutoff']
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ class TestProphet(TestCase):
|
|||
self.assertTrue(m.logistic_floor)
|
||||
self.assertTrue('floor' in m.history)
|
||||
self.assertAlmostEqual(m.history['y_scaled'][0], 1.)
|
||||
self.assertEqual(m.fit_kwargs, {'algorithm': 'Newton'})
|
||||
fcst1 = m.predict(future)
|
||||
|
||||
m2 = Prophet(growth='logistic')
|
||||
|
|
|
|||
Loading…
Reference in a new issue