Я думаю, що M0rkHaV має правильну ідею. Клас конвеєра Scikit-learn є корисним інструментом для інкапсуляції декількох різних трансформаторів поряд з оцінкою в один об’єкт, так що вам потрібно буде лише один раз викликати важливі методи ( fit()
, predict()
і т.д.). Давайте розбимо два основні компоненти:
Трансформери - це класи, які реалізують і fit()
та, і transform()
. Можливо, ви знайомі з деякими інструментами попередньої обробки sklearn, як-от TfidfVectorizer
і Binarizer
. Якщо ви подивитеся на документи цих інструментів попередньої обробки, то побачите, що вони реалізують обидва ці методи. Що мені здається досить цікавим, це те, що деякі оцінки можуть також використовуватися як етапи трансформації, наприклад LinearSVC
!
Оцінювачі - це класи, які реалізують і fit()
та, і predict()
. Ви побачите, що багато класифікаторів і регресійних моделей реалізують обидва ці способи, і як такий ви можете легко протестувати багато різних моделей. Можна використовувати інший трансформатор як кінцевий оцінювач (тобто він не обов'язково реалізовує predict()
, але напевно реалізує fit()
). Все це означає, що ви не зможете телефонувати predict()
.
Щодо редагування: давайте переглянемо текстовий приклад. За допомогою LabelBinarizer ми хочемо перетворити список міток у список бінарних значень.
bin = LabelBinarizer() #first we initialize
vec = ['cat', 'dog', 'dog', 'dog'] #we have our label list we want binarized
Тепер, коли бінарізатор встановлений на деяких даних, він буде мати структуру, яка називається, classes_
що містить унікальні класи, про які трансформатор «знає». Без виклику fit()
бінарнізатора поняття не має, як виглядають дані, тому дзвінки transform()
не мали б сенсу. Це справедливо, якщо ви надрукували список класів перед тим, як спробувати вписати дані.
print bin.classes_
При спробі цього я отримую таку помилку:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
Але коли ви поміщаєте бінарізатор у vec
список:
bin.fit(vec)
і спробуйте ще раз
print bin.classes_
Я отримую наступне:
['cat' 'dog']
print bin.transform(vec)
І тепер, після виклику перетворення на vec
об'єкт, ми отримуємо наступне:
[[0]
[1]
[1]
[1]]
Що стосується оцінювачів, які використовуються як трансформатори, то скористаємося DecisionTree
класифікатором як приклад функції екстрактора. Дерева рішень чудові з багатьох причин, але для наших цілей важливо те, що вони мають можливість ранжувати функції, які дерево вважає корисними для прогнозування. Коли ви зателефонуєте transform()
до дерева рішень, воно візьме ваші вхідні дані та знайде те, що, на його думку, є найважливішими характеристиками. Таким чином, ви можете подумати про те, що перетворює вашу матрицю даних (n рядків за m стовпцями) в меншу матрицю (n рядків за k стовпцями), де k стовпців є k найважливішими особливостями, які знайдено Дерево рішення.