Почему Sklearn Imputer должен соответствовать?

Я действительно новичок в этом процессе машинного обучения, и я беру онлайн-курс по этому предмету. В этом курсе инструкторы показали следующий фрагмент кода:

imputer = Inputer(missing_values = 'Nan', strategy = 'mean', axis=0)
imputer = Imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])

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

Может ли кто-нибудь объяснить, как работает эта машина, и почему она требует обучения для замены некоторых недостающих значений по столбцу? Я прочитал документацию по sci-kit, но он просто показывает, как использовать методы, а не почему они требуются.

Спасибо.

Ответ 1

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

from sklearn.preprocessing import Imputer
obj = Imputer(strategy='mean')

obj.fit([[1, 2, 3], [2, 3, 4]])
print(obj.statistics_)
# array([ 1.5,  2.5,  3.5])

X = obj.transform([[4, np.nan, 6], [5, 6, np.nan]])
print(X)
# array([[ 4. ,  2.5,  6. ],
#        [ 5. ,  6. ,  3.5]])

Вы можете сделать оба действия в одном, если ваш поезд и тестовые данные идентичны, используя fit_transform.

X = obj.fit_transform([[1, 2, np.nan], [2, 3, 4]])
print(X)
# array([[ 1. ,  2. ,  4. ],
#        [ 2. ,  3. ,  4. ]])

Эта проблема утечки данных важна, поскольку распространение данных может измениться с данных обучения на данные тестирования, и вы не хотите, чтобы информация о тестовых данных уже присутствовала во время подгонки.

Дополнительную информацию о перекрестной проверке см. В документе.

Ответ 2

from sklearn.preprocessing impot Imputer

imputer=Imputer(missing_values='nan',strategy="mean",axis=0) 

X[:,1:3]=imputer.fit_transform(X[:,1:3])   #Train the imputer using fit and test data using transform. This is how it works.*