Подтвердить что ты не робот

Python - Что такое sklearn.pipeline.Pipeline?

Я не могу понять, как работает sklearn.pipeline.Pipeline.

В doc есть несколько пояснений. Например, что они означают:

Труба преобразований с окончательной оценкой.

Чтобы сделать мой вопрос более ясным, что такое steps? Как они работают?

Edit

Благодаря ответам я могу уточнить свой вопрос:

Когда я вызываю конвейер и передаю в качестве этапов два трансформатора и один блок оценки, например:

pipln = Pipeline([("trsfm1",transformer_1),
                  ("trsfm2",transformer_2),
                  ("estmtr",estimator)])

Что происходит, когда я это называю?

pipln.fit()
OR
pipln.fit_transform()

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

4b9b3361

Ответ 1

Трансформатор в scikit-learn - некоторый класс, который имеет метод fit и transform или метод fit_transform.

Predictor - некоторый класс, который имеет методы соответствия и прогноза, или метод fit_predict.

Pipeline - это абстрактное понятие, это не какой-то существующий алгоритм ml. Часто в задачах ML вам необходимо выполнить последовательность различных преобразований (найти набор функций, сгенерировать новые функции, выбрать только некоторые хорошие функции) исходного набора данных до применения окончательной оценки.

Здесь - хороший пример использования Pipeline. Pipeline дает вам один интерфейс для всех трех шагов преобразования и итоговой оценки. Он инкапсулирует трансформаторы и предиктора внутри, и теперь вы можете сделать что-то вроде:

    vect = CountVectorizer()
    tfidf = TfidfTransformer()
    clf = SGDClassifier()

    vX = vect.fit_transform(Xtrain)
    tfidfX = tfidf.fit_transform(vX)
    predicted = clf.fit_predict(tfidfX)

    # Now evaluate all steps on test set
    vX = vect.fit_transform(Xtest)
    tfidfX = tfidf.fit_transform(vX)
    predicted = clf.fit_predict(tfidfX)

С помощью только:

pipeline = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('clf', SGDClassifier()),
])
predicted = pipeline.fit(Xtrain).predict(Xtrain)
# Now evaluate all steps on test set
predicted = pipeline.predict(Xtest)

С помощью конвейеров вы можете легко выполнить сетку-поиск по набору параметров для каждого шага этой мета-оценки. Как описано в ссылке выше. Все шаги, кроме последнего, должны быть преобразованы, последним шагом может быть трансформатор или предиктор. Ответ на редактирование: Когда вы вызываете pipln.fit() - каждый трансформатор внутри конвейера будет установлен на выходах предыдущего трансформатора (первый трансформатор изучается на необработанном наборе данных). Последняя оценка может быть преобразователем или предиктором, вы можете вызывать fit_transform() на конвейере только в том случае, если ваш последний оценщик является трансформатором (который реализует методы fit_transform или методы преобразования и подгонки отдельно), вы можете вызывать fit_predict() или pred() только на конвейере, только если ваша последняя оценка является предиктором. Таким образом, вы просто не можете вызвать fit_transform или преобразовать в конвейер, последний шаг которого является предиктором.

Ответ 2

Я думаю, что 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 наиболее важными функциями, найденными Деревом решений.