Como visualizar o classificador em uma svm supervisionado modelo de aprendizagem

O conjunto de dados Iris não é fácil para o gráfico de análise preditiva em sua forma original porque não é possível traçar todos os quatro coordenadas (dos recursos) do conjunto de dados em uma tela bidimensional. Portanto, você tem que reduzir as dimensões, aplicando um redução de dimensionalidade

algoritmo para os recursos.

Neste caso, o algoritmo que você vai usar para fazer a transformação de dados (reduzindo as dimensões dos recursos) é chamado de Análise de Componentes Principais (PCA).

sepal Comprimentosepal LarguraComprimento pétalapétala LarguraClasse Alvo / etiqueta
5.13,51,40,2Setosa (0)
73.24.71,4Versicolor (1)
6,33,362,5Virginica (2)

O algoritmo PCA toma todas as quatro características (números), faz um pouco de matemática sobre eles, e produz dois novos números que você pode usar para fazer a trama. Pense PCA como seguindo duas etapas gerais:

  1. Ele toma como entrada um conjunto de dados com muitos recursos.

  2. Ele reduz que a entrada para um conjunto menor de recursos (definida pelo utilizador ou determinados pelo algoritmo), transformando os componentes do conjunto de recursos para o que considera como os principais (principal) componentes.

Esta transformação do conjunto de recursos também é chamado extração de características. O código a seguir faz a redução dimensão:

gt; gt; gt; de sklearn.decomposition PCAgt importação; gt; gt; pca = PCA (n_components = 2) .fit (X_train) gt; gt; gt; pca_2d = pca.transform (X_train)

Se você já tiver importado quaisquer bibliotecas ou conjuntos de dados, não é necessário re-importação ou carregá-los em sua sessão Python atual. Se você fizer isso, no entanto, não deve afetar o seu programa.

Video: VIDEOAULA - VERBOS CLASSIFICADORES

Depois de executar o código, você pode digitar o pca_2d variável no interpretador e ver que ele gera matrizes com dois itens em vez de quatro. Estes dois novos números são representações matemáticas dos quatro números antigos. Quando o recurso de redução definido, você pode plotar os resultados por usando o seguinte código:

gt; gt; gt; importação Pylab como plgt; gt; gt; para i na gama (0, pca_2d.shape [0]): gt; gt; gt; se y_train [i] == 0: gt; gt; gt; c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = r ``, marcador = `+`) gt; gt; gt; elif y_train [i] == 1: gt; gt; gt; c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `g`, marcador = `o`) gt; gt; gt; elif y_train [i] == 2: gt; gt; gt; C3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `b`, marcador = `*`) gt; gt; gt; pl.legend ([C1, C2, C3], [ `setosa`, `versicolor`, `Virginica`]) gt; gt; gt; pl.title ( `conjunto de dados de treinamento Iris com 3 classes andknown resultados`) gt; gt; gt; pl.show ()

Isto é um gráfico de dispersão - a visualização de pontos traçados representando observações sobre um gráfico. Este gráfico de dispersão particular representa os resultados conhecidos do conjunto de dados de treinamento Iris. Há 135 pontos traçados (observações) de nosso conjunto de dados de treinamento. O conjunto de dados de treinamento consiste em

  • 45 vantagens que representam a classe setosa.



  • 48 círculos que representam a classe Versicolor.

  • 42 estrelas que representam a classe Virginica.

    Video: FRASES COM CLASSIFICADORES

Você pode confirmar o número declarado de aulas inserindo seguinte código:

gt; gt; gt; soma (y_train == 0) 45gt; gt; gt; soma (y_train == 1) 48gt; gt; gt; soma (y_train == 2) 42

A partir deste enredo pode dizer claramente que a classe setosa é linearmente separável das outras duas classes. Enquanto as classes Versicolor e virginica não são completamente separados por uma linha reta, eles não são sobrepostos por muito. A partir de uma perspectiva visual simples, os classificadores deve fazer muito bem.

A imagem abaixo mostra um gráfico do modelo Support Vector Machine (SVM) treinou com um conjunto de dados que foi dimensionalmente reduzido a duas características. Quatro características é um pequeno set recurso neste caso, você quer manter todos os quatro para que os dados podem reter a maior parte de sua informação útil. O enredo é mostrado aqui como uma ajuda visual.

Este lote inclui o superfície decisão para o classificador - a área no gráfico que representa a função de decisão que SVM usa para determinar o resultado da nova entrada de dados. As linhas de separar as áreas onde o modelo irá prever a classe particular de que um ponto de dados pertence.

A seção esquerda da trama irá prever a classe setosa, a parte do meio irá prever a classe Versicolor, ea secção direita irá prever a classe Virginica.

O modelo SVM que você criou não utilizar o conjunto de recursos dimensionalmente reduzida. Este modelo utiliza apenas redução de dimensionalidade aqui para gerar um gráfico da superfície decisão do modelo SVM - como uma ajuda visual.

A lista completa do código que cria o enredo é fornecido como referência. Ele não deve ser executado em sequência com o nosso exemplo atual, se você está acompanhando. Pode substituir algumas das variáveis ​​que você já pode ter na sessão.

O código para produzir esta trama baseia-se no código de exemplo fornecido na scikit aprender local na rede Internet. Você pode aprender mais sobre como criar gráficos como estes no scikit-learn local na rede Internet.

Aqui está a lista completa do código que cria o enredo:

gt; gt; gt; de sklearn.decomposition PCAgt importação; gt; gt; de sklearn.datasets importar load_irisgt; gt; gt; de sklearn svmgt importação; gt; gt; de sklearn cross_validationgt importação; gt; gt; importação Pylab como plgt; gt; gt; importar numpy como npgt; gt; gt; íris = load_iris () gt; gt; gt; X_train, X_test, y_train, y_test = cross_validation.train_test_split (iris.data, iris.target, test_size = 0,10, random_state = 111) gt; gt; gt; pca = PCA (n_components = 2) .fit (X_train) gt; gt; gt; pca_2d = pca.transform (X_train) gt; gt; gt; svmClassifier_2d = svm.LinearSVC (random_state = 111) .fit (pca_2d, y_train) gt; gt; gt; para i na gama (0, pca_2d.shape [0]): gt; gt; gt; se y_train [i] == 0: gt; gt; gt; c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `r`, s = 50, marcador = `+`) gt; gt; gt; elif y_train [i] == 1: gt; gt; gt; c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `g`, s = 50, marcador = `o`) gt; gt; gt; elif y_train [i] == 2: gt; gt; gt; C3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = `b`, s = 50, marcador = `*`) gt; gt; gt; pl.legend ([C1, C2, C3], [ `setosa`, `versicolor`, `Virginica`]) gt; gt; gt; x_min, x_max = pca_2d [:, 0] .min () - 1, pca_2d [:, 0] .max () + 1GT; gt; gt; y_min, y_max = pca_2d [:, 1] .min () - 1, pca_2d [:, 1] .max () + 1GT; gt; gt; xx, yy = np.meshgrid (np.arange (x_min, x_max, 0,01), np.arange (y_min, y_max, 0,01)) gt; gt; gt; Z = svmClassifier_2d.predict (np.c_ [xx.ravel (), yy.ravel ()]) gt; gt; gt; Z = Z.reshape (xx.shape) gt; gt; gt; pl.contour (xx, yy, Z) gt; gt; gt; pl.title ( `Support Vector Decisão Máquina de superfície`) gt; gt; gt; pl.axis ( `off`) gt; gt; gt; pl.show ()

Publicações relacionadas