Різниця між fit і fit_transform у моделях scikit_learn?


110

Я новачок у науці даних, і я не розумію різниці між методами fitі fit_transformнауками у навчанні. Чи може хтось просто пояснити, чому нам може знадобитися трансформація даних?

Що означає відповідність моделі навчальних даних та перетворення на тестові дані? Чи означає це, наприклад, перетворення категоричних змінних у числа в поїзді та перетворення нової функції, встановленої для перевірки даних?



@sds Відповідь вище наведено посилання на це питання.
Каушал28

Ми застосовуємо fitна training datasetі використовувати transformметод на both- навчальний набір даних і тестовий набір даних
Пракаш Кумар

Відповіді:


117

Щоб відцентрувати дані (зробити їх нульовою середньою та одиничною стандартною помилкою), ви віднімаєте середнє значення, а потім ділите результат на стандартне відхилення.

x=xμσ

Ви робите це на навчальному наборі даних. Але тоді вам доведеться застосувати те саме перетворення до свого тестового набору (наприклад, у перехресній валідації) або до нещодавно отриманих прикладів перед прогнозом. Але ви повинні використовувати ті самі два параметри та (значення), які використовувались для центрування навчального набору.σμσ

Отже, перетворення кожного склеарна fit()просто обчислює параметри (наприклад, та у випадку StandardScaler ) і зберігає їх як стан внутрішніх об'єктів. Після цього ви можете викликати його метод, щоб застосувати перетворення до певного набору прикладів.σμσtransform()

fit_transform()приєднується до цих двох кроків і використовується для початкового встановлення параметрів на навчальному наборі , але він також повертає перетворений . Внутрішньо він просто дзвонить спочатку, а потім на ті самі дані.x xxfit()transform()


1
Дякую за вашу відповідь. Просто одне. Параметри в моделі це не означає для прикладу нахилу та перехоплення для регресії? коли ви підходите, скажімо, лінійна регресія, наприклад, які параметри підходять за методом fit? Параметри нормалізації чи параметри моделі, такі як нахил та перехоплення?
Kaggle

1
Я маю на увазі параметри, внутрішні для перетворень ( та у випадку StandardScaler). Що б метод перетворення не повертався. Дивіться цей розділ щодо імпутації, наприклад: scikit-learn.org/stable/modules/…σμσget_params()
K3 --- rnc

2
Мій попередній коментар насправді неправильний. У випадку лінійної регресії пристосованими параметрами є coef_(тобто нахил та перехоплення), а не ті, що повертаються get_params()(що, натомість, повертає набір аргументів конструктора моделі з пов'язаними з ними значеннями).
K3 --- rnc

Чудова відповідь! Я натрапив на ваш пост під час пошуку цієї теми, але мені потрібно уточнити. Чи означає це, що якщо припустимо, що ми хочемо перетворити кожен набір наступних прикладів, ми ніколи не повинні викликати, fit_transform()оскільки це не дозволило б отримати доступ до стану внутрішніх об'єктів, перетворити наступні приклади з тими ж параметрами, які були отримані за fit()допомогою початкового набору даних? Це виникає, наприклад, коли у вас є тестовий набір даних і ви хочете перетворити тестовий набір, щоб передати його своєму навченому класифікатору.
АККА

Після того, як ви телефонуєте t.fit_transform(train_data), t буде встановлено, так що ви можете спокійно використовувати t.transform(test_data).
K3 --- rnc

10

Наступне пояснення грунтується на fit_transformз Imputerкласу, але ідея та ж для fit_transformінших класів scikit_learn подобається MinMaxScaler.


transformзамінює пропущені значення цифрою. За замовчуванням це число є засобом стовпців деяких даних, які ви вибираєте. Розглянемо наступний приклад:

imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])

Тепер комп'ютер навчився використовувати середнє (1 + 8) / 2 = 4,5 для першого стовпця і середнє (2 + 3 + 5,5) / 3 = 3,5 для другого стовпця, коли воно застосовується до даних двох стовпців:

X = [[np.nan, 11], 
     [4,      np.nan], 
     [8,      2],
     [np.nan, 1]]
print(imp.transform(X))

ми отримуємо

[[4.5, 11], 
 [4, 3.5],
 [8, 2],
 [4.5, 1]]

Тож за fitдопомогою комп’ютера обчислює засоби стовпців з деяких даних, і transformвін застосовує ці засоби до деяких даних (що просто замінює пропущені значення засобами). Якщо обидва ці дані однакові (тобто дані для обчислення засобів та дані, до яких застосовуються засоби), ви можете використовувати, fit_transformв основному це fita transform.

Тепер ваші запитання:

Чому нам може знадобитися перетворення даних?

"З різних причин багато наборів даних у реальному світі містять відсутні значення, які часто кодуються як пробіли, NaNs або інші заповнювачі. Однак такі набори даних несумісні з оцінниками, які вивчають scikit, які припускають, що всі значення масиву є числовими" ( джерело )

Що означає відповідність моделі навчальних даних та перетворення на тестові дані?

fitЗ imputer не має нічого спільного з fitвикористовуваним в моделі фитинга. Таким чином, використовуючи дані комп’ютера fitна даних про навчання, просто обчислюються засоби кожної колонки даних про навчання. Використання transformданих тестів потім замінює пропущені значення тестових даних засобами, які були обчислені з навчальних даних.


3

Зрозуміло, це означає, що fit_transform означає зробити деякий обчислення, а потім зробити перетворення (скажімо, обчислити засоби стовпців з деяких даних, а потім замінити пропущені значення). Тож для навчального набору потрібно як обчислити, так і зробити трансформацію.

Але для набору тестування Машинне навчання застосовує прогнозування, виходячи з того, що було вивчено під час навчального набору, і тому його не потрібно обчислювати, воно просто виконує перетворення.


3

Ці методи використовуються для перетворень набору даних у scikit-learn:

Візьмемо приклад для значень масштабування в наборі даних:

Тут метод fit , застосований до навчального набору даних, вивчає параметри моделі (наприклад, середнє та стандартне відхилення). Потім нам потрібно застосувати метод перетворення до набору даних, щоб отримати трансформований (масштабований) набір даних тренувань. Ми також могли виконати обидва ці кроки за один крок, застосувавши fit_transform на навчальний набір даних.

Тоді для чого нам потрібні 2 окремі методи - підгонка та перетворення ?

На практиці нам потрібно мати окремий набір даних про навчання та тестування, і саме тут допомагає окремий метод підгонки та перетворення . Ми застосовуємо підходи до навчального набору даних і використовуємо метод перетворення для обох даних - навчальних наборів та тестових даних. Таким чином, тренінг, а також тестовий набір даних потім трансформуються (масштабуються), використовуючи параметри моделі, які були вивчені при застосуванні методу fit навчального набору даних.

Приклад коду:

scaler = preprocessing.StandardScaler().fit(X_train)
scaler.transform(X_train) 
scaler.transform(X_test) 

2

Це не технічна відповідь, але, сподіваємось, корисно розвивати нашу інтуїцію:

По-перше, всі оцінювачі проходять навчання (або "підходити") за деякими навчальними даними. Ця частина досить проста.

По-друге, всі оцінювачі scikit-learn можуть бути використані в конвеєрі, і ідея з конвеєром полягає в тому, що дані проходять через конвеєр. Після того, як вони підходять на певному рівні в трубопроводі, дані передаються на наступний етап у трубопроводі, але очевидно, дані потрібно певним чином змінити (трансформувати); інакше вам взагалі не знадобиться ця стадія в трубопроводі. Отже, перетворення - це спосіб перетворення даних для задоволення потреб наступного етапу в конвеєрі.

Якщо ви не використовуєте конвеєр, я все ще думаю, що корисно думати про ці інструменти машинного навчання таким чином, оскільки навіть найпростіший класифікатор все ще виконує функцію класифікації. Він приймає в якості деяких даних і дає вихід. Це теж трубопровід; просто дуже простий.

Підводячи підсумок, fit виконує навчання, перетворення змінює дані в конвеєрі з тим, щоб передати їх на наступний етап у трубопроводі, а fit_transform робить як підгонку, так і перетворення в одному, можливо, оптимізованому кроці.


"" Ми застосовуємося до навчального набору даних і використовуємо метод перетворення на обох - навчальний набір даних і тестовий набір даних "" :) Ніцца
Пракаш Кумар

2
Я думаю, ви мали намір прокоментувати нижче. Я перешлю це Прасаду Нагешкар. (Ну ... я мав би, якби мав репутацію.)
Ерік Маклаклан

1

V1V2V1V2

Переходячи до іншого питання, ви спочатку будуєте модель у навчальному наборі, який є (модель вивчає шаблони чи поведінку ваших даних з навчального набору), і коли ви запускаєте ту саму модель у тестовому наборі, вона намагається визначити подібні зразки чи поведінку Після виявлення він робить свої висновки та дає результати відповідно до навчальних даних


0

Розглянемо завдання, яке вимагає від нас нормалізації даних. Наприклад, ми можемо використовувати нормалізацію min-max або нормалізацію z-балів. У моделі є деякі притаманні параметри. Мінімальні та максимальні значення при нормалізації min-max та середнє та стандартне відхилення при нормалізації z-балів. Функція fit () обчислює значення цих параметрів.

Ефект підгонки ()

Функція перетворення застосовує значення параметрів до фактичних даних і дає нормоване значення.

Ефект перетворення ()

Функція fit_transform () виконує обидва в одному кроці.

Ефект fit_transform ()

Зауважте, що те саме значення отримуємо, виконуючи ми в 2 кроки або в один крок.


0

"fit" обчислює середнє значення та std, яке буде використано для подальшого масштабування. (jsut обчислення), вам нічого не дається .

"перетворення" використовує попередньо обчислене середнє значення та std для автоматичного масштабування даних (відняти середнє значення від усіх значень, а потім розділити їх на std).

"fit_transform" робить і те й інше. Таким чином, ви можете зробити це з 1 рядка коду замість 2.

Тепер давайте розглянемо це на практиці:

Для навчального набору X ми робимо "fit_transform", оскільки нам потрібно обчислити mean і std, а потім використовувати його для автоматичного масштабування даних. Для X тестового набору , ну, у нас вже є середня величина та std, тому ми робимо лише частину "перетворення".

Це дуже просто. Ви чудово робите. Продовжуйте свою добру роботу мій друг :-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.