Como visualizar o classificador em um modelo de aprendizagem SVM Supervisionado

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

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 gera dois novos números que você pode usar para fazer a trama. Pense PCA como seguindo duas etapas gerais:

  1. Leva como entrada um conjunto de dados com muitos recursos.

  2. Ele reduz essa entrada a um conjunto menor de recursos (definido pelo usuário ou determinados pelo algoritmo) ao transformar os componentes do conjunto de recursos para o que considera como os principais componentes (principal).

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:

>>> From sklearn.decomposition PCA importação >>> pca = PCA (n_components = 2) .fit (X_train) >>> 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 na sua sessão Python atual. Se você fizer isso, no entanto, não deve afetar o seu programa.

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

image0.jpg
>>> Import Pylab como pl >>> for i no intervalo (0, pca_2d.shape [0]): >>> se y_train [i] == 0: >>> c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c 'r' =, marcador = '+') >>> elif y_train [i] == 1: >>> c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'g', marcador = 'o') >>> elif y_train [i] == 2: >>> c3 = pl.scatter (pca_2d [i, 0], pca_2d [i , 1], c = 'b', marcador = '*') >>> pl.legend ([C1, C2, C3], [ 'setosa', 'versicolor', 'Virginica']) >>> PL. title ( 'conjunto de dados de treinamento Iris com 3 classes andknown resultados') >>> pl.show ()

Isto é um gráfico de dispersão - a visualização dos 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.

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

>>> Soma (y_train == 0) 45 >>> soma (y_train == 1) 48 >>> 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 estão completamente separados por uma linha reta, eles não são sobrepostos por muito. Do ponto de vista 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 tenha sido dimensões reduzidas 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. A trama é 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 utiliza para determinar o resultado de uma nova entrada de dados. As linhas de separar as áreas onde o modelo irá prever a classe especial, 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 usar o conjunto de recursos dimensionalmente reduzida. Este modelo utiliza apenas redução de dimensionalidade aqui para gerar um gráfico da superfície de decisão do modelo SVM - como uma ajuda visual.

A listagem 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. Ele pode substituir algumas das variáveis ​​que você já pode ter na sessão.

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

image1.jpg

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

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

menu