Scikit learn не учитывает глобальные / локальные random_states в юнит-тестах - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь написать интеграционный тест, который использует описательную статистику (.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.Я ожидаю, учитывая, что я заложил семя, что результаты будут воспроизводимыми.Но похоже, что это не так, и я хотел бы понять:

  1. Почему они не равны?
  2. Что я могу сделать, чтобы сделать их равными?

Мне не удалось найти много лучших практик в отношении тестирования на ожидаемые результаты модели.Поэтому комментарии в этом отношении также будут полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...