Почему 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.*