Imágenes clasificador para el aprendizaje automático
Se puede aplicar un algoritmo de aprendizaje automático a un complejo conjunto de imágenes, llamada Las caras marcadas en el conjunto de datos Salvaje que contiene imágenes de personajes famosos recogidos a través de Internet. Debe descargar el conjunto de datos a través de Internet, utilizando el paquete de scikit-learn en Python. El paquete contiene principalmente fotografías de políticos conocidos.
advertencias de importación
(warnings.filterwarnings"ignorar")
de sklearn.datasets fetch_lfw_people importación
lfw_people = fetch_lfw_people (min_faces_per_person = 60,
Video: Aprendizaje automático con R y Python
cambiar el tamaño = 0,4)
X = lfw_people.data
y = lfw_people.target
target_names = [lfw_people.target_names [a] para A en Y]
N_SAMPLES, h, w = lfw_people.images.shape
de colecciones importar Contador
para el nombre, contar en Contador (target_names) .items ():
impresión ("% 20s% i" % (Nombre, recuento))
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
Video: Neural Networks con TensorFlow para reconocimiento de imágen
Como ejemplo de la gran variedad de datos, después de dividir los ejemplos en entrenamiento y prueba, se puede visualizar una muestra de fotos de ambos conjuntos que representan Jun`ichirô Koizumi, Primer Ministro del Japón 2001-2006.
de importación sklearn.cross_validation
StratifiedShuffleSplit
tren, prueba = (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 en enumerate (X [tren] [y [tren] == 6] [: 4]):
plt.subplot (1, 4, 1 + k)
si k == 0:
plt.title ( `Juego de tren`)
plt.axis ( `off`)
plt.imshow (m.reshape (50,37),
CMAP = plt.cm.gray, la interpolación = `cercano`)
plt.show ()
para k, m en enumerate (X [test] [y [ensayo] == 6] [: 4]):
plt.subplot (1, 4, 1 + k)
si k == 0:
plt.title ( `conjunto de prueba`)
plt.axis ( `off`)
plt.imshow (m.reshape (50,37),
CMAP = plt.cm.gray, la interpolación = `cercano`)
plt.show ()
Como se puede ver, las fotos tienen algunas variaciones bastante, incluso entre las fotos de la misma persona, lo que hace difícil la tarea: la expresión, postura, luz diferente, y la calidad de la foto. Por esta razón, el ejemplo que sigue se aplica el método de autocaras, utilizando diferentes tipos de descomposiciones y reducir las grandes vector inicial de características de píxeles (1850) a un conjunto más simple de 150 características.
El ejemplo utiliza PCA, la descomposición de la varianza técnica- no negativo matriz de factorización (NMF), una técnica para descomponer las imágenes en solamente características- positivo y FastICA, un algoritmo para el Análisis de Componentes Independientes, un análisis que extrae las señales de ruido y otras señales separadas (el algoritmo tiene éxito en el manejo de problemas como el problema cóctel).
sklearn de la descomposición de importación
n_components = 50
PCA = decomposition.RandomizedPCA (
n_components = n_components,
blanquee = True) .fit (X [tren ,:])
NMF = decomposition.NMF (n_components = n_components,
init = `nndsvda`,
tol = 5e-3) .fit (X [tren ,:])
FastICA = decomposition.FastICA (n_components = n_components,
blanquee = True) .fit (X [tren ,:])
autocaras = pca.components_.reshape ((n_components, h, w))
X_dec = np.column_stack ((pca.transform (X [tren ,:]),
nmf.transform (X [tren ,:]),
fastica.transform (X [tren ,:])))
Xt_dec = np.column_stack ((pca.transform (X [prueba ,:]),
nmf.transform (X [prueba ,:]),
fastica.transform (X [prueba ,:])))
y_dec = y [tren]
yt_dec = y [ensayo]
Después de la extracción y la concatenación de las descomposiciones de imagen en una nueva formación y la prueba de conjunto de ejemplos de datos, el código se aplica una red de búsqueda de las mejores combinaciones de parámetros para una máquina de soporte vectorial clasificación para realizar una clasificación de problemas correcta.
GridSearchCV de importación sklearn.grid_search
de importación sklearn.svm SVC
param_grid = { `C`: [0,1, 1,0, 10,0, 100,0, 1000,0],
`Gamma`: [0,0001, 0,001, 0,01, 0,1],}
CLF = GridSearchCV (SVC (kernel = `rbf`), param_grid)
CLF = clf.fit (X_dec, y_dec)
impresión ("Mejores parámetros:% s" % Clf.best_params_)
Las mejores parámetros: { `gamma`: 0,01, `C`: 100,0}
Después de encontrar los mejores parámetros, el Código de los controles de precisión - El porcentaje de respuestas correctas en la prueba - y obtiene una estimación de alrededor de 0,82 (la medida puede cambiar cuando se ejecuta el código en el ordenador).
de sklearn.metrics accuracy_score importación
solución = clf.predict (Xt_dec)
impresión("precisión alcanzada:% 0.3f"
% Accuracy_score (yt_dec, solución))
precisión alcanzada: 0,815
Más interesante aún, puede pedir una matriz de confusión que muestra las clases correctas a lo largo de las filas y las predicciones en las columnas. Cuando un personaje en una fila tiene cuenta en columnas diferentes de su número de fila, el código ha atribuido erróneamente una de las fotos a otra persona. En el caso de la ex primer ministro de Japón, el ejemplo realmente obtiene una puntuación perfecta (nótese que la salida muestra un 6 en la fila 6, columna 6, y ceros en el resto de las entradas para esa fila).
de sklearn.metrics confusion_matrix importación
confusión = str (confusion_matrix (yt_dec, solución))
print ( ` `* 26 +`` .join (mapa (str, gama (8))))
Video: Neural Networks con TensorFlow para reconocimiento de imágen
print (` `* 26 + `-` * 22)
para n, (etiqueta, fila) en enumerate (
postales (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 2 46 1 0 0 2]
Video: Train an Image Classifier with TensorFlow for Poets - Machine Learning Recipes #6
4 Gerhard Schroeder gt; [0 0 2 1 6 1 0 1]
5Hugo Chavez gt; [0 0 0 0 1 5 0 1]
6 Junichiro Koizumi gt; [0 0 0 0 0 0 6 0]
7 Tony Blair gt; [0 0 0 1 2 0 0 11]]