Como padronizar uma matriz se o desvio padrão é zero?


8

Estou tentando padronizar colunas de conjunto de dados para regressão linear.

Uma das colunas possui desvio padrão = 0.

def standardize(X):
    return (X - mean(X)) / std(X) 

Portanto, esse código não funciona.

Existem truques para resolver este problema? Eu tentei duas coisas

  1. Jogue sempre a coluna com desvio padrão 0 porque é um parâmetro inútil.
  2. Adicione um ruído muito pequeno, como a um dos elementos da coluna para que a função funcione.1010standardize

Obrigado!


Você está fazendo certo. Como segunda opção, será melhor adicionar ruído aleatoriamente distribuído aleatório com pequeno desvio padrão a todos os valores da coluna. Mas como a primeira opção é mais simples, é preferível.
O_Devinyak

16
Se o desvio padrão for zero, a coluna será preenchida por um valor. Portanto, se seu objetivo é preparar os dados para a regressão, você pode jogar fora a coluna, pois ela não contribuirá com nada para a regressão. A adição de pequenos ruídos fornecerá apenas mais problemas.
Mpgtas 29/08/2012

4
(Com a ressalva de que @mpiktas assume implicitamente que a regressão conterá um termo constante, o que geralmente é o caso.) Observe que adicionar um pequeno ruído fará com que essa coluna e a constante sejam extremamente paralelas, potencialmente criando todos os tipos de estragos no código numérico. soluções devido à alta multicolinearidade. Mas por que padronizar as colunas em primeiro lugar? Isso acontecerá automaticamente, usando praticamente qualquer bom método de solução.
whuber

5
@Pratik, não acho que exista uma maneira de transformar uma variável com variação zero em uma com média 0 e variação 1. Se você fizer a opção (2) acima, efetivamente substituirá sua variável por números aleatórios padronizados.
Macro

Respostas:


7

A situação que você descreve surgirá como resultado de um desses dois cenários:

  1. A coluna a que você está se referindo é a coluna de 1 adicionada à sua matriz de covariáveis, para que sua regressão linear tenha um termo de interceptação .
  2. A coluna é uma coluna diferente da coluna mencionada anteriormente, fornecendo duas colunas de constantes [****].

Para o Cenário 1 : pule essa coluna, padronize todas as outras colunas e execute a regressão como faria normalmente.

Para o cenário 2 , no entanto, você terá que se livrar completamente dessa coluna constante adicional. De fato, independentemente da questão da padronização , você nunca poderá executar a regressão com duas colunas constantes, desde então, teria uma colinearidade perfeita . O resultado é que, mesmo se você tentar executar a regressão, o programa de computador emitirá uma mensagem de erro e sairá no meio [Nota: isso ocorre porque uma regressão OLS exige que a matriz X'X não seja singular para que as coisas funcionem corretamente].

De qualquer forma, boa sorte com o seu, hum, regredindo!

[****] Apenas para esclarecer: o que quero dizer com "duas colunas de constantes" é que você tem uma coluna na qual todo elemento é '1' e uma segunda coluna na qual todo elemento é uma constante 'k' .. .


1

O caminho certo seria excluir a coluna do recurso dos dados. Mas como um corte temporário -

Você pode simplesmente substituir o 0 std para 1 para esse recurso. Isso basicamente significa que o valor escalado seria zero para todos os pontos de dados desse recurso. Isso faz sentido, pois implica que os valores dos recursos não se desviam nem um pouco da média (como os valores são constantes, a constante é a média).

FYI- É isso que o sklearn faz! https://github.com/scikit-learn/scikit-learn/blob/7389dbac82d362f296dc2746f10e43ffa1615660/sklearn/preprocessing/data.py#L70


O desvio padrão sendo 0 significa que o recurso é constante e, portanto, não é útil para previsão. Alterar o desvio padrão para uma constante não faz sentido.
Michael R. Chernick 11/02/19

Sim, não faz sentido da perspectiva da modelagem, apenas sugeri como um hack para não ter o trabalho de excluir a coluna toda vez que um recurso constante entra em um conjunto de dados.
PankajKabra 11/02/19

0

O recurso que tem variação zero é inútil, remova-o.

Considere isso: se esse fosse o único recurso, você não aprenderia nada sobre a resposta a esse recurso a partir dos dados. No caso multivariado, é necessário álgebra linear para chegar à mesma conclusão, mas a idéia é a mesma.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.