Não consigo descobrir como sklearn.pipeline.Pipeline
funciona exatamente.
Existem algumas explicações no documento . Por exemplo, o que eles querem dizer com:
Pipeline de transformações com um estimador final.
Para deixar minha pergunta mais clara, quais são steps
? Como eles funcionam?
Editar
Graças às respostas, posso deixar minha pergunta mais clara:
Quando eu chamo o pipeline e passo, como etapas, dois transformadores e um estimador, por exemplo:
pipln = Pipeline([("trsfm1",transformer_1),
("trsfm2",transformer_2),
("estmtr",estimator)])
O que acontece quando eu ligo para isso?
pipln.fit()
OR
pipln.fit_transform()
Não consigo descobrir como um estimador pode ser um transformador e como um transformador pode ser instalado.
python
machine-learning
scikit-learn
neuraxle
farhawa
fonte
fonte
Respostas:
Transformer no scikit-learn - alguma classe que possui o método fit e transform ou o método fit_transform.
Predictor - alguma classe que possui métodos de ajuste e predição ou método fit_predict.
Pipeline é apenas uma noção abstrata, não é um algoritmo de ml existente. Freqüentemente, em tarefas de ML, você precisa realizar uma sequência de transformações diferentes (encontrar o conjunto de recursos, gerar novos recursos, selecionar apenas alguns recursos bons) do conjunto de dados bruto antes de aplicar o estimador final.
Aqui está um bom exemplo de uso de pipeline. O Pipeline oferece uma única interface para todas as 3 etapas de transformação e o estimador resultante. Ele encapsula transformadores e preditores dentro, e agora você pode fazer algo como:
Com apenas:
Com pipelines, você pode facilmente realizar uma pesquisa em grade sobre um conjunto de parâmetros para cada etapa deste metaestimador. Conforme descrito no link acima. Todas as etapas, exceto a última, devem ser transformações, a última etapa pode ser transformador ou preditor. Resposta para editar : Quando você chama
pipln.fit()
- cada transformador dentro do pipeline será encaixado nas saídas do transformador anterior (o primeiro transformador é aprendido no conjunto de dados bruto). O último estimador pode ser transformador ou preditor, você pode chamar fit_transform () no pipeline apenas se seu último estimador for transformador (que implementa fit_transform ou métodos de transformação e ajuste separadamente), você pode chamar fit_predict () ou predizer () no pipeline apenas se seu último estimador é o preditor. Portanto, você simplesmente não pode chamar fit_transform ou transformar no pipeline, a última etapa é o preditor.fonte
predicted = pipeline.fit(Xtrain).predict(Xtrain)
?Acho que M0rkHaV tem a ideia certa. Classe pipeline da scikit-learn é uma ferramenta útil para encapsular vários transformadores diferentes ao lado de um estimador em um objeto, de modo que você só tem que chamar seus métodos importantes uma vez (
fit()
,predict()
, etc). Vamos dividir os dois componentes principais:Transformers são classes que implementam
fit()
etransform()
. Você deve estar familiarizado com algumas das ferramentas de pré-processamento do sklearn, comoTfidfVectorizer
eBinarizer
. Se você olhar a documentação dessas ferramentas de pré-processamento, verá que elas implementam ambos os métodos. O que eu acho muito legal é que alguns estimadores também podem ser usados como etapas de transformação, por exemploLinearSVC
!Estimadores são classes que implementam ambos
fit()
epredict()
. Você descobrirá que muitos dos classificadores e modelos de regressão implementam esses dois métodos e, como tal, pode testar prontamente muitos modelos diferentes. É possível usar outro transformador como o estimador final (ou seja, não necessariamente implementapredict()
, mas definitivamente implementafit()
). Tudo isso significa que você não conseguiria ligarpredict()
.Quanto à sua edição: vamos examinar um exemplo baseado em texto. Usando LabelBinarizer, queremos transformar uma lista de rótulos em uma lista de valores binários.
Agora, quando o binarizador for encaixado em alguns dados, ele terá uma estrutura chamada
classes_
que contém as classes exclusivas que o transformador 'conhece'. Sem chamarfit()
o binarizador não tem ideia de como os dados se parecem, então chamartransform()
não faria sentido. Isso é verdade se você imprimir a lista de classes antes de tentar ajustar os dados.Recebo o seguinte erro ao tentar isso:
Mas quando você coloca o binarizador na
vec
lista:e tente novamente
Eu obtenho o seguinte:
E agora, depois de chamar transform no
vec
objeto, obtemos o seguinte:Quanto aos estimadores sendo usados como transformadores, vamos usar o
DecisionTree
classificador como um exemplo de extrator de características. Árvores de decisão são ótimas por vários motivos, mas, para nossos objetivos, o importante é que elas têm a capacidade de classificar recursos que a árvore considerou úteis para previsão. Quando você chamatransform()
uma árvore de decisão, ela pega seus dados de entrada e encontra o que pensa ser os recursos mais importantes. Portanto, você pode pensar em transformar sua matriz de dados (n linhas por m colunas) em uma matriz menor (n linhas por k colunas), onde as k colunas são as k características mais importantes que a Árvore de Decisão encontrou.fonte
fit()
etransform()
são os Transformers? , como estimadores podem ser usados como transformadores?fit()
é o método que você chama para ajustar ou 'treinar' seu transformador, como faria com um classificador ou modelo de regressão. Quanto atransform()
, esse é o método que você chama para realmente transformar os dados de entrada em dados de saída. Por exemplo, chamarBinarizer.transform([8,2,2])
(após o ajuste!) Pode resultar em[[1,0],[0,1],[0,1]]
. Quanto ao uso de estimadores como transformadores, vou editar um pequeno exemplo em minha resposta.O que são pipelines de ML e como funcionam?
Um pipeline é uma série de etapas nas quais os dados são transformados. Ele vem do antigo padrão de design "tubo e filtro" (por exemplo, você pode pensar em comandos bash unix com tubos “|” ou operadores de redirecionamento “>”). No entanto, os pipelines são objetos no código. Assim, você pode ter uma classe para cada filtro (também conhecido como cada etapa do pipeline) e, em seguida, outra classe para combinar essas etapas no pipeline final. Alguns pipelines podem combinar outros pipelines em série ou em paralelo, ter várias entradas ou saídas e assim por diante. Gostamos de ver os pipelines de aprendizado de máquina como:
Métodos de um pipeline Scikit-Learn
Pipelines (ou etapas no pipeline) devem ter esses dois métodos :
Também é possível chamar este método para encadear ambos:
Problemas da classe sklearn.pipeline.Pipeline
O Scikit-Learn teve seu primeiro lançamento em 2007, que era uma era pré-aprendizado profundo . No entanto, é uma das bibliotecas de aprendizado de máquina mais conhecidas e adotadas e ainda está crescendo. Acima de tudo, ele usa o padrão de design Pipe e Filter como um estilo de arquitetura de software - é o que torna o Scikit-Learn tão fabuloso, somado ao fato de fornecer algoritmos prontos para uso. No entanto, ele tem grandes problemas quando se trata de fazer o seguinte, o que deveríamos ser capazes de fazer em 2020:
Soluções que encontramos para os problemas do Scikit-Learn
Com certeza, o Scikit-Learn é muito conveniente e bem construído. No entanto, ele precisa ser atualizado. Aqui estão nossas soluções com Neuraxle para tornar o Scikit-Learn novo e utilizável em projetos de computação modernos!
Métodos e recursos adicionais de pipeline oferecidos por meio do Neuraxle
Nota: se uma etapa de um pipeline não precisa ter um dos métodos de ajuste ou transformação, ela pode herdar de NonFittableMixin ou NonTransformableMixin para ser fornecida uma implementação padrão de um desses métodos para não fazer nada.
Para começar, é possível que os pipelines ou suas etapas também definam opcionalmente esses métodos :
Os seguintes métodos são fornecidos por padrão para permitir o gerenciamento de hiperparâmetros:
RandInt(1, 3)
que significa 1 a 3 camadas. Você pode chamar.rvs()
este dict para escolher um valor aleatoriamente e enviá-lo para “set_hyperparams” para tentar treinar nele.Para mais informações sobre nossas soluções sugeridas, leia as entradas na grande lista com os links acima.
fonte