StandardScaler до і після поділу даних


20

Коли я читав про використання StandardScaler, більшість рекомендацій говорили про те, що слід використовувати, StandardScaler перш ніж розділяти дані на поїзд / тест, але коли я перевіряв деякі коди, розміщені в Інтернеті (за допомогою sklearn), було два основних напрямки.

1- Використання StandardScalerвсіх даних. Напр

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_fit = sc.fit(X)
X_std = X_fit.transform(X)

Або

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit(X)
X = sc.transform(X)

Або просто

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_std = sc.fit_transform(X)

2- Використання StandardScalerрозділених даних.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

Я хотів би стандартизувати свої дані, але мене бентежить, який метод найкращий!

Відповіді:


25

Для того, щоб не допустити, щоб інформація про розповсюдження тестового набору витікала у вашу модель, вам слід скористатися варіантом №2 та встановити скалер лише на свої дані тренувань, а потім стандартизувати як навчальні, так і тестові набори з цим скалером. Встановлюючи скалер на повний набір даних перед розщепленням (варіант №1), інформація про тестовий набір використовується для перетворення навчального набору, який, у свою чергу, передається нижче за течією.

Як приклад, знання розподілу всього набору даних може впливати на те, як ви виявляєте та обробляєте сторонніх людей, а також на те, як ви параметризуєте свою модель. Хоча самі дані не піддаються, інформація про розподіл даних є. Як результат, продуктивність вашого тестового набору не є справжньою оцінкою ефективності небачених даних. Деякі подальші обговорення, які можуть вам бути корисними, є на веб- перехресному підтвердженому .


Чи те ж саме стосується набору перевірок? Іншими словами, якщо я розділюю свій навчальний набір на набори поїздів і валідації, чи я дізнаюсясь, що він підходить тільки на поїзді, а потім застосувати до комплектів перевірки та тестування пізніше? чи я дізнаюсь, як вони знаходяться у всьому наборі даних, який складався з прикладів перевірки та тренувань, і я хвилююся лише про те, щоб застосувати його до тестового набору пізніше.
Філ Глау

привіт - це правильно, підходить тільки в поїзді - не валідація чи тест
redhqs

0

Як щодо наступного:

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.fit_transform (X_test)

Тому що якщо X_test = sc.transform(X_test), він повертає помилку X_testще не встановлено. Або я щось тут пропустив?


2
Просто зніміть форму з X_test
tsumaranaina

0

Ви не повинні робити fit_transform (X_test) на даних тесту.
Підгонка вже відбулася вище.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

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