#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.