Também devemos aplicar a normalização aos dados de teste?

17

Estou fazendo um projeto sobre o problema de identificação do autor. Eu tinha aplicado a normalização tf-idf para treinar dados e, em seguida, treinei um svm nesses dados.

Agora, ao usar o classificador, devo normalizar os dados de teste também. Eu sinto que o objetivo básico da normalização é fazer com que algo de aprendizado dê mais peso a recursos mais importantes durante o aprendizado. Portanto, uma vez treinado, ele já sabe quais recursos são importantes e quais não são. Então, também é necessário aplicar a normalização para testar dados?

Eu sou novo neste campo. Então, por favor, ignore se a pergunta parecer boba?

Kishan Kumar
fonte
4
Seus dados de teste devem estar na mesma escala que os dados de treinamento.
Jon

Respostas:

36

Sim, você precisa aplicar a normalização aos dados de teste, se o seu algoritmo funcionar com ou precisar de dados de treinamento normalizados *.

Isso ocorre porque seu modelo trabalha na representação dada por seus vetores de entrada. A escala desses números faz parte da representação. É um pouco como converter entre pés e metros. . . um modelo ou fórmula funcionaria normalmente com apenas um tipo de unidade.

Você não precisa apenas de normalização, mas deve aplicar exatamente o mesmo dimensionamento que os seus dados de treinamento. Isso significa armazenar a escala e o deslocamento usados ​​com seus dados de treinamento e usá-los novamente. Um erro comum para iniciantes é normalizar separadamente seus dados de trem e teste.

No Python e no SKLearn, você pode normalizar seus valores de entrada / X usando o Standard Scaler como este:

scaler = StandardScaler()
train_X = scaler.fit_transform( train_X )
test_X = scaler.transform( test_X )

Observe como a conversão do train_Xuso de uma função que se encaixa (calcula os parâmetros) normaliza. Enquanto a test_Xconversão se transforma, use os mesmos parâmetros que aprendeu com os dados do trem.

A normalização tf-idf que você está aplicando deve funcionar de maneira semelhante, pois aprende alguns parâmetros do conjunto de dados como um todo (frequência de palavras em todos os documentos), além de usar as proporções encontradas em cada documento.


* Alguns algoritmos (como aqueles baseados em árvores de decisão) não precisam de entradas normalizadas e podem lidar com recursos que possuem diferentes escalas inerentes.

Neil Slater
fonte
+1 para explicar que os parâmetros de normalização para o teste devem ser os mesmos que os determinados no treinamento. Entendo que essa lógica se estenda a todos os conjuntos de validação também.
Greenstick
@Greenstick: Sim, é claro, estende-se ao tratamento de todos os dados inseridos no modelo. Incluindo novos dados se um modelo será usado para inferência na produção. Eu acho que a resposta é longa o suficiente sem cobrir tudo isso, e o ponto em que você divide os dados de validação varia muito (muitos modelos incorporam isso à etapa de treinamento), portanto, não foi possível mostrar exemplo de código.
Neil Slater
2
Você deve escalar (ajustar_transformar) os dados de teste COM os dados de treinamento? Ou faça isso separadamente usando a mesma escala (scaler.transform)?
Bob Ebert
2
@ BobEbert: Você pode fazer qualquer um. Tecnicamente, você pode estar vazando uma pequena quantidade de informações do teste para o treinamento, se você ajustar um redimensionador ao conjunto de dados combinado - para que a versão "oficial" seja a de ajustar o redimensionador apenas aos dados de treinamento e aplicá-lo a todos os outros conjuntos de dados a partir de então. No entanto, esse vazamento é muito pequeno e nunca o vi causar um problema na prática se você ajustar o redimensionador a todos os dados que possui.
Neil Slater
6

Definitivamente você deve normalizar seus dados. Você normaliza os dados para os seguintes objetivos:

  • Por ter características diferentes na mesma escala, o que é para acelerar o processo de aprendizado.

  • Por cuidar de diferentes recursos de maneira justa sem importar a balança.

Após o treinamento, seu algoritmo de aprendizado aprendeu a lidar com os dados em formato escalonado, portanto, você deve normalizar seus dados de teste com os parâmetros de normalização usados ​​para os dados de treinamento.

meios de comunicação
fonte