sklearn: нужно ли создавать новый экземпляр transformer для каждого набора данных?

#python #pandas #scikit-learn #data-science

#python #pandas #scikit-learn #наука о данных

Вопрос:

Я новичок в data science и scikit-learn, поэтому прошу прощения, если это простой вопрос. Нужно ли нам создавать новый экземпляр класса sklearn, когда мы хотим обучаться на новом наборе данных? Например, в настоящее время я делаю:

 transformer = PowerTransformer()
transformed1 = transformer.fit_transform(data1.to_numpy())

transformer = PowerTransformer()
transformed2 = transformer.fit_transform(data2.to_numpy()) 
...
  

У меня есть несколько наборов данных, которые я хочу преобразовать, чтобы их можно было запускать KNNImputer (снова используя этот повторяющийся декларативный подход).

Я читал, что .fit метод внутренне хранит лямбды, которые он использовал для подгонки переданных данных, но перезаписываются ли сохраненные лямбды при каждом вызове .fit или на них влияет подгонка к новым данным?

Было бы неправильно сделать:

 transformer = PowerTransformer()
transformed1 = transformer.fit_transform(data1.to_numpy())
transformed2 = transformer.fit_transform(data2.to_numpy())
...
  

Заранее благодарю вас!

Ответ №1:

нет, это было бы правильно, в обоих случаях вы сначала подгоняете данные, а затем преобразуете их. каждый раз, когда вы используете fit, он перезаписывает существующий. Вот пример:

 a = np.array([[1, 3], 
              [np.nan, 2], 
              [5, 9]])

c = np.array([[3, 4], 
              [6, 12], 
              [8, np.nan]])

imp = SimpleImputer(strate&y="mean")
a1 = imp.fit_transform(a)
c1 = imp.fit_transform(c)
  

Теперь давайте посмотрим на выходные данные:

 a1: array([[1., 3.],
           [3., 2.],
           [5., 9.]])

c1: array([[ 3.,  4.],
           [ 6., 12.],
           [ 8.,  8.]])
  

Принимает среднее значение обоих столбцов (как указано в документе sklearn) и вычисляет среднее значение. То же самое должно работать и в KNNImputer.