Ciência de dados: como criar interações entre variáveis ​​com python

cientistas de dados pode usar Python para criar interações entre variáveis. Em uma combinação linear, o modelo reage à forma como uma variável muda de forma independente em relação às alterações em outras variáveis. Em estatística, este tipo de modelo é um principal e

fmodelo fects.

Video: Aulas Python - 150 - Bancos de Dados IV - SQL

O classificador Naïve Bayes faz uma suposição semelhante para probabilidades, e também funciona bem com problemas de texto complexos.

Mesmo que máquina funciona usando aproximações e um conjunto de variáveis ​​independentes podem fazer as suas previsões funcionam bem na maioria das situações de aprendizagem, às vezes você pode perder uma parte importante da imagem. Você pode facilmente pegar este problema, descrevendo a variação no seu alvo associada com a variação conjunta de duas ou mais variáveis ​​de duas maneiras simples e diretas:

  • O conhecimento existente de domínio do problema: Por exemplo, no mercado de carro, ter um motor barulhento é um incômodo em um carro da cidade, mas considerada uma vantagem para carros esportivos (todos querem ouvir que você tem um carro ultra-legal e caro). Ao conhecer a preferência do consumidor, você pode modelar uma variável nível de ruído e uma variável do tipo de carro juntos para obter previsões exatas usando um modelo analítico preditivo que adivinha o valor do carro com base em suas características.

  • Testando combinações de diferentes variáveis: Através da realização de testes de grupo, você pode ver o efeito que certas variáveis ​​têm na sua variável-alvo. Portanto, mesmo sem saber sobre motores barulhentos e carros esportivos, você poderia ter pego uma média diferente de nível de preferência quando se analisa o conjunto de dados divididos por tipo de carros e nível de ruído.

O exemplo a seguir mostra como testar e detectar interacções no conjunto de dados Boston. A primeira tarefa é carregar algumas classes auxiliares:

Video: Aulas Python - 077 - Armazenamento de Dados III: json

sklearn.linear_model de importação LinearRegressionfrom sklearn.cross_validation importação cross_val_scorefrom importação sklearn.cross_validation KFoldregression = regressão linear (normalizar = TRUE) validação cruzada = KFold (n = X.shape [0], n_folds = 10, baralhamento = True, random_state = 1)

O código reinicializa o pandas Quadro de dados usando apenas as variáveis ​​de previsão. UMA para ciclo coincide com os diferentes preditores e cria uma nova variável contendo cada interacção. A formulação matemática de uma interacção é simplesmente uma multiplicação.

df = pd.DataFrame (X, colunas = boston.feature_names) da linha de base = np.mean (cross_val_score (regressão, df, y, pontuação = `R2`, CV = validação cruzada, n_jobs = 1)) = interacções lista () para feature_A em boston.feature_names: para feature_B em boston.feature_names: se feature_A gt; feature_B: df [ ‘interacção’] = df [feature_A] * df [feature_B] pontuação = np.mean (cross_val_score (regressão, df, y, pontuação = ‘R2’, CV = validação cruzada, n_jobs = 1)) se a pontuação gt; linha de base: interactions.append ((feature_A, feature_B, redondo (pontuação, 3))) de impressão `Linha de Base R2:% .3f` % baselineprint `Top 10 interacções:% s` % ordenadas (interacções, chave = lambda (X): X [2], inverter = TRUE) [: 10] Linha de Base R2: 0.699Top 10 interacções: [( `RM`, `lstat`, 0,782), ( `IMPOSTO`, `RM`, 0,766),
( ‘RM’, ‘RAD’, 0,759), ( ‘RM’, ‘PTRATIO’, 0,75),
( ‘RM’, ‘INDUS’, 0,748), ( ‘RM’, ‘NOX’, 0,733),
( ‘RM’, ‘B’, 0,731), ( ‘RM’, ‘em geral’, 0,727),
( ‘RM’, ‘DIS’, 0,722), ( ‘ZN’, ‘RM’, 0,716)]

testa o código específico a adição de cada interacção para o modelo usando uma validação cruzada 10 dobras. Ele registra a mudança na medida R2 em uma pilha (uma lista simples) que um aplicativo pode solicitar e explorar mais tarde.



A linha de base R2 é 0,699, então uma melhora relatada da pilha de interações para 0,782 parece bastante impressionante! É importante saber como esta melhoria é possível. As duas variáveis ​​envolvidas são RM (o número médio de quartos) e lstat (a percentagem de população de estatuto inferior).

cores = [ ‘k’ se v gt; np.mean (y) mais ‘w’ para v em Y] de dispersão = df.plot (tipo = ‘dispersão’, x = ‘RM’, y ‘= lstat’, c = cores)

Esta dispersão esclarece a melhoria. Em uma parte das casas no centro da trama, é necessário conhecer quer lstat e RM de forma a separar correctamente as casas de alto valor a partir do baixo-valor houses- portanto, uma interacção é indispensável no caso em apreço.

variáveis ​​combinadas lstat e RM ajuda para separar alta de preços baixos.
variáveis ​​combinadas lstat e RM ajuda para separar alta de preços baixos.

Adição de interacções e variáveis ​​transformadas conduz a um modelo de regressão linear prolongado, uma regressão polinomial. cientistas de dados dependem de testar e experimentar para validar uma abordagem para resolver um problema, então o seguinte código modifica ligeiramente o código anterior para redefinir o conjunto de preditores usando interações e termos quadráticos por quadratura as variáveis:

polyX = pd.DataFrame (X, colunas = boston.feature_names) da linha de base = np.mean (cross_val_score (regressão, polyX, y, 
de pontuação = `mean_squared_error`, CV = validação cruzada, n_jobs = 1)) melhorias = [base] para feature_A em boston.feature_names: polyX [feature_A + `^ 2`] = polyX [feature_A] ** 2improvements.append (np.mean ( cross_val_score (regressão, polyX, y, pontuação = `mean_squared_error`, CV = validação cruzada, n_jobs = 1))) para feature_B em boston.feature_names: se feature_A gt; feature_B: polyX [feature_A + `*` + feature_B] = polyX [feature_A] * polyX [feature_B] improvements.append (np.mean (cross_val_score (regressão, polyX, y, pontuação = `mean_squared_error`, CV = validação cruzada, n_jobs = 1 )))

Para acompanhar melhorias como o código adiciona novos termos complexos, a exemplo coloca valores na melhorias Lista. Aqui é um gráfico dos resultados que demonstram algumas adições são grandes, porque o erro quadrado diminui, e outras adições são terríveis porque aumentam o erro em seu lugar.

Adicionando recursos polinomiais aumenta o poder preditivo.
Adicionando recursos polinomiais aumenta o poder preditivo.

Claro, você poderia realizar um teste em curso para adicionar um termo quadrático ou interação opcionalmente, o que é chamado de uma abordagem uni e ganancioso. Este exemplo é uma boa base para a verificação outras maneiras de controlar a complexidade existente de seus conjuntos de dados ou a complexidade que você tem que induzir com a transformação e criação de recurso no curso de esforços de exploração de dados. Antes de prosseguir, você verificar tanto a forma do conjunto de dados real e seu erro quadrado médio cross-validado.

forma de impressão (polyX) validação cruzada = KFold (n = X.shape [0], n_folds = 10, baralhamento = True, random_state = 1) de impressão ‘erro quadrático médio% .3f’% abs (np.mean (cross_val_score (regressão, 
polyX, y, pontuação = ‘mean_squared_error’, CV = validação cruzada, n_jobs = 1))) (506, 104) 13,466 erro quadrático médio

Mesmo que o erro quadrado médio é bom, a razão entre 506 observações e 104 recursos não é bom em tudo.

Como regra geral, deve haver 10-20 observações para cada coeficiente desejar estimar em modelos lineares. No entanto, a experiência mostra que ter pelo menos 30 deles é melhor.


Publicações relacionadas