Repository: sktime/sktime

Issue:
[BUG] EnsembleForecaster keeps adding estimators when called multiple times
**Describe the bug**
The fitting function in `EnsembleForecaster` keeps adding estimators each time it is called without removing any prior fits. This does not change behaviour for if the estimators are deterministic but might do so if they include a stochastic element and might blow up the object if called multiple times. 

**To Reproduce**


```python
import pandas as pd
from sktime.forecasters import ExpSmoothingForecaster
from sktime.forecasters import EnsembleForecaster
from sktime.datasets import load_shampoo_sales

shampoo = load_shampoo_sales()
train = pd.Series([shampoo.iloc[0].iloc[:30]])

estimator = [('ses', ExpSmoothingForecaster())]
m = EnsembleForecaster(estimators=estimator)

m.fit(train, fh=1)
print(len(m.fitted_estimators_)) # Result: 1
m.fit(train, fh=1)
print(len(m.fitted_estimators_)) # Result: 2
```

**Expected behavior**
Clear previous fits whenever the fit method is called.

**Versions**
<details>

Windows-10-10.0.17763-SP0
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
NumPy 1.17.2
SciPy 1.3.1
sktime 0.3.0

</details>

[BUG] EnsembleForecaster keeps adding estimators when called multiple times
**Describe the bug**
The fitting function in `EnsembleForecaster` keeps adding estimators each time it is called without removing any prior fits. This does not change behaviour for if the estimators are deterministic but might do so if they include a stochastic element and might blow up the object if called multiple times. 

**To Reproduce**


```python
import pandas as pd
from sktime.forecasters import ExpSmoothingForecaster
from sktime.forecasters import EnsembleForecaster
from sktime.datasets import load_shampoo_sales

shampoo = load_shampoo_sales()
train = pd.Series([shampoo.iloc[0].iloc[:30]])

estimator = [('ses', ExpSmoothingForecaster())]
m = EnsembleForecaster(estimators=estimator)

m.fit(train, fh=1)
print(len(m.fitted_estimators_)) # Result: 1
m.fit(train, fh=1)
print(len(m.fitted_estimators_)) # Result: 2
```

**Expected behavior**
Clear previous fits whenever the fit method is called.

**Versions**
<details>

Windows-10-10.0.17763-SP0
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)]
NumPy 1.17.2
SciPy 1.3.1
sktime 0.3.0

</details>



Discussion:
Thanks for raising the issue! If you're interested, it may be good to re-write the ensemble class to make it more robust, sklearn's ensemble methods should provide a good starting point.
Thanks for raising the issue! If you're interested, it may be good to re-write the ensemble class to make it more robust, sklearn's ensemble methods should provide a good starting point.

Resolving patch:
diff --git a/sktime/forecasters/compose.py b/sktime/forecasters/compose.py
--- a/sktime/forecasters/compose.py
+++ b/sktime/forecasters/compose.py
@@ -60,6 +60,9 @@ def fit(self, y, fh=None, X=None):
         # validate forecasting horizon
         fh = validate_fh(fh)
 
+        # Clear previously fitted estimators
+        self.fitted_estimators_ = []
+
         for _, estimator in self.estimators:
             # TODO implement set/get params interface
             # estimator.set_params(**{"check_input": False})


Test patch: