Classificando imagens para aprendizado de máquina

Você pode aplicar um algoritmo de aprendizado de máquina a um complexo conjunto de imagens, chamado de Faces marcados no conjunto de dados selvagem

que contém imagens de pessoas famosas recolhidos através da Internet. Você deve baixar o conjunto de dados a partir da Internet, usando o scikit-learn pacote em Python. O pacote contém principalmente fotos de políticos conhecidos.

avisos de importação

warnings.filterwarnings ("ignorar")

de sklearn.datasets fetch_lfw_people importação

lfw_people = fetch_lfw_people (min_faces_per_person = 60,

redimensionar = 0,4)

X = lfw_people.data

y = lfw_people.target

target_names = [lfw_people.target_names [A] durante um em Y]

N_SAMPLES, H, W = lfw_people.images.shape

a partir de coleções importar Contador

para o nome, a contagem no contador (target_names) .items ():

impressão ("%% 20s eu" % (Nome, contagem))

Ariel Sharon 77

Junichiro Koizumi 60

Colin Powell 236

Gerhard Schroeder 109

Tony Blair 144

Hugo Chavez 71

George W Bush 530

Donald Rumsfeld 121

Como um exemplo de variedade de conjunto de dados, depois de dividir os exemplos em treinamento e teste conjuntos, você pode exibir uma amostra de fotos de ambos os conjuntos representando Jun`ichiro Koizumi, primeiro-ministro do Japão de 2001 a 2006.

de importação sklearn.cross_validation

StratifiedShuffleSplit

trem, test = lista (StratifiedShuffleSplit (target_names,

n_iter = 1, test_size = 0,1, random_state = 101)) [0]

plt.subplot (1, 4, 1)

plt.axis ( `off`)

para K, m, em enumerar (X [trem] [Y [trem] == 6] [: 4]):

plt.subplot (1, 4, 1 + k)

se k == 0:

plt.title ( `set Train`)

plt.axis ( `off`)

plt.imshow (m.reshape (50,37),

cmap = plt.cm.gray, interpolação = `mais próximo`)

plt.show ()

para K, m, em enumerar (X [teste] [Y [teste] == 6] [: 4]):

plt.subplot (1, 4, 1 + k)

se k == 0:

plt.title ( `conjunto de teste`)

plt.axis ( `off`)

Video: Como ensinar um computador a classificar galáxias? -- Walter dos Santos Jr

plt.imshow (m.reshape (50,37),

cmap = plt.cm.gray, interpolação = `mais próximo`)

plt.show ()

aprendizagem de máquina conjunto de treinamento
Exemplos de conjuntos de treinamento e teste diferem em pose e expressão.

Como você pode ver, as fotos têm algumas variações, mesmo entre fotos da mesma pessoa, o que torna a tarefa desafiadora: expressão, pose, luz diferente, e a qualidade da foto. Por esse motivo, o exemplo que se segue aplica-se o método eigenfaces, usando diferentes tipos de decomposições e reduzir o grande vector inicial de características de pixel (1.850) para um conjunto mais simples dos 150 dispositivos.

O exemplo usa PCA, a decomposição da variância technique- Non-Negative Matrix Factorization (NMF), uma técnica de decomposição imagens em única características-positivo e FastICA, um algoritmo para análise de componentes independentes, uma análise que extrai os sinais de ruído e outros sinais separados (o algoritmo é bem sucedido em lidar com problemas como o problema coquetel).

a partir da decomposição importação sklearn

n_components = 50

PCA = decomposition.RandomizedPCA (



n_components = n_components,

branquear = True) .fit (X [trem ,:])

NMF = decomposition.NMF (n_components = n_components,

Init = `nndsvda`,

tol = 5e-3) .fit (X [trem ,:])

FastICA = decomposition.FastICA (n_components = n_components,

branquear = True) .fit (X [trem ,:])

eigenfaces = pca.components_.reshape ((n_components, H, W))

X_dec = np.column_stack ((pca.transform (X [trem ,:]),

nmf.transform (X [trem ,:]),

fastica.transform (X [trem ,:])))

Xt_dec = np.column_stack ((pca.transform (X [teste ,:]),

nmf.transform (X [teste ,:]),

fastica.transform (X [teste ,:])))

y_dec = y [trem]

Video: Segmentação de Imagem no Spring - Primeiros passos para Classificação Supervisionada por Regiões

yt_dec = y [teste]

Depois de extrair e concatenando as decomposições de imagem em um novo treinamento e teste conjunto de exemplos de dados, o código se aplica uma pesquisa grid para as melhores combinações de parâmetros para uma máquina de vetores de suporte classificação para executar uma classificação problema correta.

de GridSearchCV importação sklearn.grid_search

de importação sklearn.svm SVC

param_grid = { `C`: [0,1, 1,0, 10,0, 100,0, 1000,0],

`Gama`: [0,0001, 0,001, 0,01, 0,1],}

clf = GridSearchCV (SVC (kernel = `RBF), param_grid)

clf = clf.fit (X_dec, y_dec)

impressão ("Melhores parâmetros:% s" % Clf.best_params_)

Os melhores parâmetros: { `gama`: 0,01, `C`: 100,0}

Depois de encontrar os melhores parâmetros, o código verifica para precisão - a percentagem de respostas corretas no conjunto de teste - e obtém uma estimativa de cerca de 0,82 (a medida pode mudar quando você executar o código no seu computador).

de sklearn.metrics accuracy_score importação

solução = clf.predict (Xt_dec)

impressão("precisão alcançada:% 0.3f"

% Accuracy_score (yt_dec, solução))

precisão alcançada: 0,815

Mais interessante, você pode pedir uma matriz de confusão que mostra as classes corretas ao longo das linhas e as previsões nas colunas. Quando um personagem em uma linha tem contagens em colunas diferentes de seu número da linha, o código foi erroneamente atribuída uma das fotos para outra pessoa. No caso do ex-primeiro-ministro do Japão, o exemplo na verdade recebe uma pontuação perfeita (aviso de que o resultado mostra um 6 em linha 6, coluna 6, e zeros no restante das entradas para essa linha).

de sklearn.metrics confusion_matrix importação

confusão = str (confusion_matrix (yt_dec, solução))

print ( ` `* 26 +`` .join (mapa (str, gama (8))))

print (` `* 26 + `-` * 22)

para n, (etiqueta, linha) em enumerar (

zip (lfw_people.target_names,

confusion.split ( ` n`))):

print ( `% s% 18s gt; % S`% (n, etiqueta, fila))

0 1 2 3 4 5 6 7

----------------------

0Ariel Sharon gt; [[6 0 1 0 1 0 0 0]

1Colin Powell gt; [0 22 0 2 0 0 0 0]

2 Donald Rumsfeld gt; [0 0 8 2 1 0 0 1]

3 George W Bush gt; [1 1 46 2 1 0 0 2]

4 Gerhard Schroeder gt; [0 0 2 1 1 0 1 6]

5Hugo Chavez gt; [0 0 0 0 1 5 0 1]

6 Junichiro Koizumi gt; [0 0 0 0 0 0 0 6]

7 Tony Blair gt; [0 0 0 1 2 0 0 11]]


Publicações relacionadas