Usando regressão logística em python para a ciência de dados

Você pode usar regressão logística em Python para a ciência de dados. A regressão linear é bem adequado para estimar valores, mas não é a melhor ferramenta para prever a classe de uma observação. Apesar da teoria estatística que aconselha contra isso, você pode realmente tentar classificar uma classe binário ao marcar uma classe como um eo outro como 0. Os resultados são decepcionantes na maioria das vezes, por isso a teoria estatística não estava errado!

O fato é que a regressão linear funciona em um continuum de estimativas numéricas. Para classificar corretamente, você precisa de uma medida mais adequada, tal como a probabilidade de propriedade de classe. Graças à seguinte fórmula, você pode transformar uma regressão estimativa numérica linear em uma probabilidade de que é mais apto a descrever como uma classe se encaixa uma observação:

probabilidade de uma classe = exp (R) / (1 + exp (r))

Video: Executando programas em python (Nelson Lago)

r é o resultado de regressão (a soma das variáveis ​​ponderados pelos coeficientes) e exp é a função exponencial. exp (r) corresponde ao número de Euler e elevado à potência de r. Uma regressão linear, utilizando um tal fórmula (também chamado de uma função de ligação) para transformar os seus resultados em probabilidades é uma regressão logística.

Aplicando regressão logística

regressão logística é semelhante à regressão linear, com a única diferença sendo os dados Y, que deve conter valores inteiros que indicam a classe em relação à observação. Usando o conjunto de dados Iris do scikit-learn conjuntos de dados módulo, é possível utilizar os valores 0, 1 e 2 para designar três classes que correspondem a três espécies:

Video: Curso de Python, Aula16, Estrutura de Dados, (Dicionários)

de sklearn.datasets importar load_irisiris = load_iris () X, Y = iris.data [: - ,: 1], iris.target [: - 1]

Para tornar o exemplo mais fácil de trabalhar, deixe um único valor para fora para que mais tarde você pode usar esse valor para testar a eficácia do modelo de regressão logística nele.

sklearn.linear_model de importação LogisticRegressionlogistic = regressão logística () logistic.fit (X, Y) de impressão `classe Prevista% s, real classe s%` % (logistic.predict (iris.data [-1,:]), iris.target [-1]) de impressão de probabilidades para cada classe de 0 a 2:% s `% logistic.predict_proba (iris.data [-1,:]) classe Previsto [2], 2Probabilities classe reais para cada classe de 0 a 2 : [[0.00168787 0.28720074 0.71111138]]

Contrariamente à regressão linear, regressão logística não apenas de saída a classe resultante (neste caso, a classe 2), mas também estima a probabilidade de estar da observação parte de todas as três classes. Baseado na observação utilizado para a previsão, regressão logística estima uma probabilidade de 71 por cento de seu ser da classe 2 - uma probabilidade alta, mas não uma pontuação perfeita, portanto, deixando uma margem de incerteza.



Usando probabilidades permite adivinhar a classe mais provável, mas você também pode encomendar as previsões com relação a fazer parte dessa classe. Isto é especialmente útil para fins médicos: Classificação uma previsão em termos de probabilidade com relação aos outros pode revelar o que os pacientes estão em maior risco de contrair ou já ter uma doença.

Considerando-se quando as aulas são mais

O problema anterior, regressão logística, lida automaticamente com um problema múltiplo classe (que começou com três espécies de íris de adivinhar). A maioria dos algoritmos fornecidos pelo scikit-learn que prever probabilidades ou uma pontuação para a classe pode manipular automaticamente problemas multiclasse usando duas estratégias diferentes:

  • Um contra resto: O algoritmo compara cada classe com todas as demais classes, construindo um modelo para cada classe. Se você tem dez classes de adivinhar, você tem dez modelos. Esta abordagem baseia-se na OneVsRestClassifier classe de scikit-learn.

  • Um contra um: O algoritmo compara cada classe contra todas as classes restante indivíduo, a construção de uma série de modelos equivalentes para n * (n-1) / 2, Onde n é o número de classes. Se você tem dez classes, você tem 45 modelos. Esta abordagem baseia-se na OneVsOneClassifier classe de scikit-learn.

No caso de regressão logística, a estratégia multiclasse padrão é o um contra resto. Este exemplo mostra como usar ambas as estratégias com o conjunto de dados de escrita à mão dígitos, que contém uma classe para os números de 0 a 9. O seguinte código carrega os dados e coloca-lo em variáveis.

de sklearn.datasets importar load_digitsdigits = load_digits () X, Y = digits.data [: 1700 ,:], digits.target [: 1700] tX, ty = digits.data [1700:,:], digits.target [1700 :]

As observações são realmente uma grade de valores de pixel. dimensões da grade são 8 pixels por 8 pixels. Para tornar os dados mais fácil de aprender por algoritmos de aprendizado de máquina, o código alinha-los em uma lista de 64 elementos. O exemplo reserva uma parte dos exemplos disponíveis para um teste.

de importação sklearn.multiclass importação OneVsRestClassifierfrom sklearn.multiclass OneVsOneClassifierOVR = OneVsRestClassifier (regressão logística ()) se encaixam (X, Y) OVO = OneVsOneClassifier (regressão logística ()) se encaixam (X, Y) print `One vs precisão resto:..% .3f `% OVR.score (TX, ty) print `um contra um precisão:% .3f` % OVO.score (TX, ty) um vs precisão resto: 0.938One vs uma precisão: 0,969

As duas classes multiclasse OneVsRestClassifier e OneVsOneClassificador operar através da incorporação do estimador (neste caso, LogisticRegressão). Após a incorporação, eles geralmente trabalham como qualquer outro algoritmo de aprendizagem em scikit-learn. Curiosamente, a estratégia de um-contra-um obtido a melhor precisão graças ao seu elevado número de modelos em competição.

Ao trabalhar com Anaconda e Python versão 3.4, você pode receber um aviso de reprovação ao trabalhar com este exemplo. Você é seguro ignorar o aviso de depreciação - o exemplo deve funcionar como normal. Todo o aviso depreciação diz é que um dos recursos usados ​​no exemplo é devido para uma atualização ou ficarão indisponíveis em uma versão futura do Python.


Publicações relacionadas