Я пытаюсь написать интеграционный тест, который использует описательную статистику (.describe().to_list()
) результатов прогнозирования модели (model.predict(X)
).Однако, несмотря на то, что я установил np.random.seed(###)
, описательная статистика после запуска тестов в консоли отличается от среды, созданной Pycharm:
Вот MRE для локального:
from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
import numpy as np
import pandas as pd
np.random.seed(42)
X, y = make_regression(n_features=2, random_state=42)
regr = ElasticNet(random_state=42)
regr.fit(X, y)
pred = regr.predict(X)
# Theory: This result should be the same from the result in a class
pd.Series(pred).describe().to_list()
И пример файла теста:
from unittest import TestCase
from sklearn.linear_model import ElasticNet
from sklearn.datasets import make_regression
import numpy as np
import pandas as pd
np.random.seed(42)
class TestPD(TestCase):
def testExpectedPrediction(self):
np.random.seed(42)
X, y = make_regression(n_features=2, random_state=42)
regr = ElasticNet(random_state=42)
regr.fit(X, y)
pred = pd.Series(regr.predict(X))
for i in pred.describe().to_list():
print(i)
# here we would have a self.assertTrue/Equals f.e. element
Похоже, что когда я запускаю этот тест в консоли Python, я получаю один результат.Но затем, когда я запускаю его, используя юнит-тесты PyCharm для папки, я получаю другой результат.Теперь, что важно, в PyCharm интерпретатор проекта используется для создания среды консоли, которая должна быть такой же, как и среда тестирования.Это оставляет меня верить, что я что-то упускаю из-за способа передачи random_state.Я ожидаю, учитывая, что я заложил семя, что результаты будут воспроизводимыми.Но похоже, что это не так, и я хотел бы понять:
- Почему они не равны?
- Что я могу сделать, чтобы сделать их равными?
Мне не удалось найти много лучших практик в отношении тестирования на ожидаемые результаты модели.Поэтому комментарии в этом отношении также будут полезны.