Sou iniciante em ciência de dados e não entendo a diferença entre fite fit_transformmétodos no scikit-learn. Alguém pode simplesmente explicar por que precisamos transformar dados?
O que significa ajustar modelo em dados de treinamento e transformar em dados de teste? Significa, por exemplo, converter variáveis ​​categóricas em números no trem e transformar um novo conjunto de recursos para testar dados?
Veja também qual é a diferença entre 'transform' e 'fit_transform' no sklearn
@sds A resposta acima fornece o link para esta pergunta.
— Kaushal28
Nós aplicamos fitno training datasete usar o transformmétodo on both- o conjunto de dados de treinamento e o conjunto de dados de teste
Para centralizar os dados (faça com que tenha média zero e erro padrão da unidade), você subtrai a média e depois divide o resultado pelo desvio padrão.
Se você está procurando por um modelo que não seja o ideal, você pode optar por um modelo mais compacto, que combine com o seu estilo. quando você se encaixa, digamos uma regressão linear, por exemplo, quais parâmetros são ajustados no método de ajuste? Parâmetros de normalização ou parâmetros de modelo como inclinação e interceptação?
Quero dizer parâmetros internos para as transformações ( e no caso do StandardScaler). Qualquer que seja o método da transformação retorne. Veja este capítulo sobre imputação, por exemplo: scikit-learn.org/stable/modules/…σμμσσget_params()
Meu comentário anterior está realmente errado. No caso de regressão linear, os parâmetros ajustados são coef_(ou seja, inclinação e interceptação), não os retornados por get_params()(que, em vez disso, retorna o conjunto de argumentos do construtor de modelo com seus valores associados).
Ótima resposta! Encontrei sua postagem enquanto pesquisava sobre este tópico, mas preciso esclarecer. Isso significa que, se suponhamos que queremos transformar cada conjunto de exemplos subsequentes, nunca devemos chamar, fit_transform()pois isso não nos permitirá acessar o estado de objetos internos, transformar exemplos subsequentes com os mesmos parâmetros que foram obtidos fit()no conjunto de dados inicial? Isso ocorre, por exemplo, quando você tem um conjunto de dados de teste e deseja transformar o conjunto de testes para passá-lo ao seu classificador treinado.
Depois de ligar t.fit_transform(train_data), t está instalado, para que você possa usá-lo com segurança t.transform(test_data).
A seguinte explicação é baseada na fit_transformda Imputerclasse, mas a idéia é a mesma para fit_transformoutras classes scikit_learn gosto MinMaxScaler.
transformsubstitui os valores ausentes por um número. Por padrão, esse número é o meio das colunas de alguns dados que você escolher. Considere o seguinte exemplo:
Agora, o imputador aprendeu a usar uma média (1 + 8) / 2 = 4,5 para a primeira coluna e média (2 + 3 + 5,5) / 3 = 3,5 para a segunda coluna, quando aplicada a dados de duas colunas:
Portanto, fito imputador calcula as médias das colunas de alguns dados e transformaplica esses meios a alguns dados (que substitui apenas os valores ausentes pelos médios). Se esses dois dados forem os mesmos (ou seja, os dados para calcular as médias e os dados aos quais são aplicadas), você poderá usar o fit_transformque é basicamente a fitseguido por a transform.
Agora suas perguntas:
Por que precisamos transformar dados?
"Por várias razões, muitos conjuntos de dados do mundo real contêm valores ausentes, geralmente codificados como espaços em branco, NaNs ou outros espaços reservados. Esses conjuntos de dados, no entanto, são incompatíveis com os estimadores do scikit-learn que assumem que todos os valores em uma matriz são numéricos" ( fonte )
O que significa ajustar modelo em dados de treinamento e transformar em dados de teste?
O fitde um imputador não tem nada a ver com o fitusado no ajuste do modelo. Portanto, o uso do imputer fitnos dados de treinamento apenas calcula as médias de cada coluna de dados de treinamento. O uso transformde dados de teste substitui os valores ausentes dos dados de teste por meios que foram calculados a partir dos dados de treinamento.
Nos termos do leigo, fit_transform significa fazer algum cálculo e depois fazer a transformação (por exemplo, calcular as médias das colunas de alguns dados e, em seguida, substituir os valores ausentes). Portanto, para o conjunto de treinamento, você precisa calcular e fazer a transformação.
Mas, para o conjunto de testes, o aprendizado de máquina aplica a previsão com base no que foi aprendido durante o conjunto de treinamento e, portanto, não precisa ser calculado, apenas realiza a transformação.
Esses métodos são usados ​​para transformações de conjuntos de dados no scikit-learn:
Vamos dar um exemplo para dimensionar valores em um conjunto de dados:
Aqui, o método de ajuste , quando aplicado ao conjunto de dados de treinamento, aprende os parâmetros do modelo (por exemplo, média e desvio padrão). Em seguida, precisamos aplicar o método de transformação no conjunto de dados de treinamento para obter o conjunto de dados de treinamento transformado (em escala). Também podemos executar essas duas etapas em uma etapa aplicando fit_transform no conjunto de dados de treinamento.
Então, por que precisamos de 2 métodos separados - ajustar e transformar ?
Na prática, precisamos ter um conjunto de dados de treinamento e teste separado e é aí que ter um método de ajuste e transformação separado ajuda. Aplicamos o ajuste no conjunto de dados de treinamento e usamos o método de transformação em ambos - o conjunto de dados de treinamento e o conjunto de dados de teste. Assim, o treinamento e o conjunto de dados de teste são transformados (escalados) usando os parâmetros do modelo que foram aprendidos ao aplicar o método de ajuste ao conjunto de dados de treinamento.
Esta não é uma resposta técnica, mas espero que seja útil criar nossa intuição:
Em primeiro lugar, todos os estimadores são treinados (ou "em forma") em alguns dados de treinamento. Essa parte é bastante direta.
Segundo, todos os estimadores do scikit-learn podem ser usados ​​em um pipeline e a idéia com um pipeline é que os dados fluam através do pipeline. Uma vez ajustados em um nível específico no pipeline, os dados são transmitidos para o próximo estágio no pipeline, mas obviamente os dados precisam ser alterados (transformados) de alguma maneira; caso contrário, você não precisaria desse estágio no pipeline. Portanto, transformar é uma maneira de transformar os dados para atender às necessidades do próximo estágio no pipeline.
Se você não estiver usando um pipeline, ainda acho útil pensar nessas ferramentas de aprendizado de máquina dessa maneira, porque mesmo o classificador mais simples ainda está executando uma função de classificação. Toma como entrada alguns dados e produz uma saída. Este também é um pipeline; apenas um muito simples.
Em resumo, o fit realiza o treinamento, transforma os dados no pipeline para transformá- los no próximo estágio do pipeline, e o fit_transform realiza o ajuste e a transformação em uma etapa possivelmente otimizada.
"" Aplicamos o ajuste ao conjunto de dados de treinamento e usamos o método de transformação em ambos - o conjunto de dados de treinamento e o conjunto de dados de teste "" :) Nice
Eu acho que você quis comentar abaixo. Vou encaminhar para Prasad Nageshkar. (Bem ... eu teria se tivesse reputação.)
Ao aplicar as transformações que você está tentando fazer seus dados para se comportar normalmente, por exemplo, se você tiver duas variáveis e Ambas as medidas as distâncias, mas possui as unidades como centímetros e tem as unidades em Quilômetros de modo a fim de comparar estes dois você tem que convertê-los para as mesmas unidades ... assim Transformar está fazendo um comportamento semelhante ou fazendo-se comportar como uma distribuição normalV1V1V2V2V1V1V2V2
Chegando a outra pergunta, primeiro você constrói o modelo no conjunto de treinamento (o modelo aprende os padrões ou o comportamento de seus dados no conjunto de treinamento) e, quando você executa o mesmo modelo no conjunto de teste, ele tenta identificar os padrões ou comportamentos semelhantes uma vez identificado, tira suas conclusões e dá resultados de acordo com os dados de treinamento
Considere uma tarefa que requer a normalização dos dados. Por exemplo, podemos usar uma normalização min-max ou normalização do escore z. Existem alguns parâmetros inerentes ao modelo. Os valores mínimo e máximo na normalização min-max e a média e desvio padrão na normalização do escore z. A função fit () calcula os valores desses parâmetros.
A função de transformação aplica os valores dos parâmetros nos dados reais e fornece o valor normalizado.
A função fit_transform () executa as duas na mesma etapa.
Observe que o mesmo valor é obtido, seja em duas etapas ou em uma única etapa.
"fit" calcula a média e o padrão para serem usados ​​em redimensionamentos posteriores . (apenas uma computação), nada é dado a você.
"transform" usa uma média e std previamente calculadas para dimensionar automaticamente os dados (subtrair a média de todos os valores e depois dividi-la por std).
"fit_transform" faz as duas coisas ao mesmo tempo. Então você pode fazer isso com 1 linha de código em vez de 2.
Agora vamos ver na prática:
Para o conjunto de treinamento X , fazemos "fit_transform" porque precisamos calcular mean e std e, em seguida, usá-lo para dimensionar automaticamente os dados. Para o conjunto de testes X , bem, já temos a média e o padrão, portanto, apenas fazemos a parte "transformar".