Consequência do dimensionamento de recursos

11

Atualmente, estou usando SVM e dimensionando meus recursos de treinamento para o intervalo de [0,1]. Primeiro ajustei / transformei meu conjunto de treinamento e depois apliquei a mesma transformação ao meu conjunto de testes. Por exemplo:

    ### Configure transformation and apply to training set
    min_max_scaler = MinMaxScaler(feature_range=(0, 1))
    X_train = min_max_scaler.fit_transform(X_train)

    ### Perform transformation on testing set
    X_test = min_max_scaler.transform(X_test)

Suponhamos que um determinado recurso no conjunto de treinamento tenha um intervalo de [0,100] e que o mesmo recurso no conjunto de testes tenha um intervalo de [-10,120]. No conjunto de treinamento, esse recurso será dimensionado adequadamente para [0,1], enquanto no conjunto de testes esse recurso será dimensionado para um intervalo fora do especificado primeiro, algo como [-0,1,1.2].

Fiquei me perguntando o que as conseqüências dos recursos do conjunto de testes estão fora do alcance daqueles usados ​​para treinar o modelo? Isso é um problema?

mike1886
fonte

Respostas:

6

Dentro de cada classe, você terá distribuições de valores para os recursos. Isso por si só não é motivo de preocupação.

De um ponto de vista um pouco teórico, você pode se perguntar por que deve dimensionar seus recursos e por que deve dimensioná-los exatamente da maneira escolhida.
Um motivo pode ser que seu algoritmo de treinamento específico converja mais rapidamente (melhor) com valores em torno de 0 a 1 do que com recursos que cobrem outras ordens de magnitude. Nesse caso, você provavelmente está bem. Meu palpite é que seu SVM está bom: você deseja evitar números muito grandes por causa do produto interno, mas um máximo de 1,2 versus um máximo de 1,0 não fará muita diferença.
(OTOH, se você, por exemplo, soubesse que seu algoritmo não aceita valores negativos, obviamente estaria com problemas.)

A questão prática é se o seu modelo tem um bom desempenho nos casos que estão ligeiramente fora do intervalo coberto pelo treinamento. Acredito que isso possa ser melhor e possivelmente apenas ser respondido testando-se com esses casos / inspecionando os resultados dos testes para queda de desempenho para casos fora do domínio do treinamento. É uma preocupação válida e analisar isso faria parte da validação do seu modelo.

Observar as diferenças do tamanho que você descreve é ​​um motivo para observar de perto a estabilidade do modelo.

cbeleites descontentes com o SX
fonte
7

Isso foi feito como um comentário, mas é muito longo.

O fato de seu conjunto de testes ter um intervalo diferente pode ser um sinal de que o conjunto de treinamento não é uma boa representação do conjunto de testes. No entanto, se a diferença for realmente pequena, como no seu exemplo, é provável que isso não afete suas previsões. Infelizmente, acho que não tenho um bom motivo para pensar que isso não afetará um SVM em nenhuma circunstância.

Observe que a lógica para usar o MinMaxScalar é (de acordo com a documentação):

A motivação para usar esse dimensionamento inclui robustez a desvios padrão muito pequenos de recursos e preservação de zero entradas em dados esparsos.

Portanto, é importante garantir que seus dados se encaixem nesse caso.

Se você está realmente preocupado em ter um intervalo de diferenças, use uma padronização regular (como preprocessing.scale).

Robert Smith
fonte
Olá Robert, obrigado pela resposta! Bom argumento sobre a representação do conjunto de treinamento / teste, mas esses são dados de séries temporais, portanto, à medida que novos dados são recebidos, não posso garantir que os valores tenham um alcance semelhante ao que eram antes. Tenho o mesmo sentimento que você de que não tenho boas razões para pensar que isso não afetará um SVM em nenhuma circunstância.
precisa saber é o seguinte
Você comparou previsões usando o MinMaxScaler e a padronização?
Robert Smith
Eu tenho e os resultados são semelhantes, mas isso realmente não me diz se as coisas estão ficando complicadas com o MinMaxScalar.
precisa saber é o seguinte
Certo. De qualquer forma, seria melhor usar a padronização se você não obtiver algo valioso MinMaxScaler.
Robert Smith