Adivinhar as características certas para aprendizado de máquina
Ter muitos recursos para trabalhar com pode parecer para abordar a necessidade de aprendizagem de máquina para entender um problema totalmente. No entanto, apenas ter características não resolve nada- você precisa as características certas para resolver problemas. Continue lendo para garantir que você tenha os recursos adequados ao executar tarefas de aprendizagem de máquina.
Conteúdo
Definindo o resultado de recursos que não funcionam em conjunto
Como mencionado anteriormente, ter muitos recursos e fazê-los trabalhar juntos podem indicar incorretamente que o seu modelo está funcionando bem quando na verdade não é. A menos que você use validação cruzada, as medidas de erro, tais como R2 pode ser enganosa, porque o número de recursos pode facilmente inflá-lo, mesmo se o recurso não contém informações relevantes. O exemplo a seguir mostra o que acontece com R2 quando você adicionar recursos apenas aleatórios.
de sklearn.cross_validation train_test_split importação
de sklearn.metrics r2_score importação
Video: Você consegue adivinhar o filme?
X_train, X_test, y_train, y_test = train_test_split (X,
y, test_size = 0,33, random_state = 42)
verificar = [2 ** i para i no intervalo (8)]
para i na gama (2 ** 7 + 1):
X_train = np.column_stack ((X_train, np.random.random (
X_train.shape [0])))
X_test = np.column_stack ((X_test, np.random.random (
X_test.shape [0])))
regression.fit (X_train, y_train)
se eu em cheque:
impressão ("características aleatórias:% i -gt; R2:% 0.3f" %
(I, r2_score (y_train, regression.predict (X_train))))
O que parece ser uma capacidade de previsão aumento é realmente apenas uma ilusão. Você pode revelar o que aconteceu, verificando o conjunto de teste e descobrir que o desempenho do modelo diminuiu.
regression.fit (X_train, y_train)
de impressão ( `R2% 0.3f`
% R2_score (y_test, regression.predict (X_test)))
# Por favor, note que o resultado R2 podem mudar de corrida para
# Executar devido à natureza aleatória do experimento
R2 0,474
Resolver overfitting usando selecção
Regularização é uma solução eficaz, rápido e fácil de implementar quando você tem muitos recursos e quer reduzir a variância das estimativas devido à multicolinearidade entre seus preditores. Regularização funciona adicionando uma penalidade para a função de custo. A penalização é um somatório dos coeficientes. Se os coeficientes são quadrado (para que os valores positivos e negativos não podem cancelar um ao outro), é uma L2 regularização (Também chamado de Cume). Quando você usa o valor absoluto coeficiente, que é uma L1 regularização (Também chamado de Laço).
No entanto, regularização nem sempre funciona perfeitamente. L2 regularização mantém todas as características do modelo e equilibra a contribuição de cada um deles. Em uma solução L2, se duas variáveis se correlacionam bem, cada um contribui igualmente para a solução para uma parte, enquanto que sem regularização, a sua contribuição compartilhada teria sido distribuída de forma desigual.
Alternativamente, L1 traz características altamente correlacionadas fora do modelo, fazendo seu coeficiente zero, propondo uma verdadeira seleção entre recursos. Na verdade, que fixa o coeficiente de zero é como excluindo o recurso a partir do modelo. Quando multicolinearidade é alta, a escolha de qual indicador para definir a zero torna-se um pouco aleatório, e você pode obter várias soluções caracterizadas por recursos de forma diferente excluídos. Tal instabilidade solução pode revelar-se um incômodo, tornando a solução L1 inferior a ideal.
Os estudiosos descobriram uma correção, criando várias soluções baseadas em L1 regularização e, em seguida, olhando como os coeficientes de comportar toda soluções. Neste caso, o algoritmo pega apenas os coeficientes estáveis (aqueles que raramente são definidas para zero). Você pode ler mais sobre esta técnica no Scikit-learn website. O exemplo a seguir modifica o exemplo expansões polinomial usando L2 regularização (cume regressão) e reduz a influência de coeficientes redundantes criadas pelo processo de expansão:
de sklearn.preprocessing PolynomialFeatures importação
Video: eu vou acerta seus pensamentos
de sklearn.cross_validation train_test_split importação
Video: Adivinhando através da Matemática - Você pensa eu adivinho
PF = PolynomialFeatures (grau = 2)
poly_X = pf.fit_transform (X)
X_train, X_test, y_train, y_test =
train_test_split (poly_X,
y, test_size = 0,33, random_state = 42)
de Ridge importação sklearn.linear_model
reg_regression = cume (alfa = 0,1, normalizar = TRUE)
reg_regression.fit (X_train, y_train)
print ( `R2:% 0.3f`
% R2_score (y_test, reg_regression.predict (X_test)))
Video: Truque Matemático: Vou Chutar Sua Idade! (2016)
R2: 0,819
O próximo exemplo usa L1 regularização. Neste caso, o exemplo se baseia em R pois fornece uma biblioteca eficaz para a regressão penalizado chamada glmnet. Você pode instalar o suporte necessário usando o seguinte comando:
install.packages ("glmnet")
professores e acadêmicos de Stanford Friedman, Hastie, Tibshirani, e Simon criou este pacote. Prof. Trevor Hastie realmente mantém o pacote R. O exemplo mostrado abaixo tenta visualizar o caminho coeficiente, que representa a forma como a mudanças de valor de coeficiente de acordo com a força de regularização. O parâmetro lambda decide a força de regularização. Como antes, o seguinte exemplo R baseia-se no conjunto de dados de Boston, o qual é obtido a partir do pacote de massa.
dados (Boston, pacote ="MASSA")
biblioteca (glmnet)
X lt; - as.matrix (escala (Boston [, 1: Ncol (Boston) -1]))
y lt; - as.numeric (Boston [, Ncol (Boston)])
caber = glmnet (X, Y, = família"gaussian", Alfa = 1,
padronizar = FALSO)
trama (ajuste, xvar ="lambda", Label = TRUE, LWD = 2)
O gráfico representa todos os coeficientes, colocando os seus valores normalizados em ordenadas, o eixo vertical. Quanto a como a abscissa, a escala usa uma função de log de lambda para que você ter uma idéia do pequeno valor de lambda no lado mais à esquerda do gráfico (onde é como uma regressão padrão). A abscissa mostra também outra escala, colocado na parte superior do gráfico, que lhe diz quantos coeficientes são diferentes de zero em que o valor lambda.
Correndo da esquerda para a direita, você pode observar como coeficientes diminuir em valor absoluto até que se tornem zero, contando-lhe a história de como regularização afeta um modelo. Naturalmente, se você só precisa estimar um modelo e os coeficientes para as melhores previsões, você precisa encontrar o valor lambda correcto utilizando validação cruzada:
cv lt; - cv.glmnet (X, Y, = família"gaussian",
alfa = 1, padronizar = FALSO)
coef (cv, s ="lambda.min")