Looking for scikit-learn Keywords? Try Ask4Keywords

scikit-learnEmpezando con scikit-learn


Observaciones

scikit-learn es una biblioteca de código abierto de propósito general para el análisis de datos escrito en python. Se basa en otras bibliotecas de python: NumPy, SciPy y matplotlib

scikit-learn contiene una serie de implementaciones para diferentes algoritmos populares de aprendizaje automático.

Instalación de scikit-learn

La versión estable actual de scikit-learn requiere :

  • Python (> = 2.6 o> = 3.3),
  • NumPy (> = 1.6.1),
  • Ciencia ficción (> = 0.9).

Durante la mayor instalación pip gestor de paquetes Python puede instalar Python y todas sus dependencias:

pip install scikit-learn
 

Sin embargo, para los sistemas Linux, se recomienda utilizar el conda paquetes conda para evitar posibles procesos de compilación.

conda install scikit-learn
 

Para verificar que tiene scikit-learn , ejecute en shell:

python -c 'import sklearn; print(sklearn.__version__)'
 

Instalación de Windows y Mac OSX:

Canopy y Anaconda entregan una versión reciente de scikit-learn , además de un amplio conjunto de bibliotecas científicas de Python para Windows, Mac OSX (también relevante para Linux).

Creando tuberías

La búsqueda de patrones en los datos a menudo se realiza en una cadena de pasos de procesamiento de datos, por ejemplo, selección de características, normalización y clasificación. En sklearn , una tubería de etapas se utiliza para esto.

Por ejemplo, el siguiente código muestra una tubería que consta de dos etapas. La primera escala las características y la segunda entrena un clasificador en el conjunto de datos aumentado resultante:

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier(n_neighbors=4))
 

Una vez que se crea la tubería, puede usarla como una etapa regular (dependiendo de sus pasos específicos). Aquí, por ejemplo, la tubería se comporta como un clasificador. En consecuencia, podemos usarlo de la siguiente manera:

# fitting a classifier
pipeline.fit(X_train, y_train)
# getting predictions for the new data sample
pipeline.predict_proba(X_test)
 

Interfaces y convenciones:

Diferentes operaciones con datos se realizan utilizando clases especiales.

La mayoría de las clases pertenecen a uno de los siguientes grupos:

  • algoritmos de clasificación (derivados de sklearn.base.ClassifierMixin ) para resolver problemas de clasificación
  • algoritmos de regresión (derivados de sklearn.base.RegressorMixin ) para resolver el problema de la reconstrucción de variables continuas (problema de regresión)
  • Transformaciones de datos (derivadas de sklearn.base.TransformerMixin ) que preprocesan los datos

Los datos se almacenan en numpy.array s (pero se numpy.array otros objetos similares a una pandas.DataFrame como pandas.DataFrame s si son convertibles a numpy.array s)

Cada objeto en los datos se describe mediante un conjunto de características. La convención general es que la muestra de datos se representa con una matriz, donde la primera dimensión es la identificación de la muestra de datos, la segunda dimensión es la identificación de la característica.

import numpy
data = numpy.arange(10).reshape(5, 2)
print(data)

Output:
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]
 

En sklearn convenciones de sklearn el conjunto de datos anterior contiene 5 objetos, cada uno descrito por 2 características.

Conjuntos de datos de muestra

Para facilitar la prueba, sklearn proporciona algunos conjuntos de datos sklearn.datasets en el módulo sklearn.datasets . Por ejemplo, carguemos datos de iris de Fisher:

import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
iris_dataset.keys()
['target_names', 'data', 'target', 'DESCR', 'feature_names']
 

Puede leer la descripción completa, los nombres de las características y los nombres de las clases ( target_names ). Esos se almacenan como cadenas.

Nos interesan los datos y las clases, que se almacenan en los data y target campos de target . Por convención, se denotan como X y y

X, y = iris_dataset['data'], iris_dataset['target']
X.shape, y.shape
((150, 4), (150,))
 
numpy.unique(y)
array([0, 1, 2])
 

Las formas de X e y dicen que hay 150 muestras con 4 características. Cada muestra pertenece a una de las siguientes clases: 0, 1 o 2.

Ahora se pueden usar X e y para entrenar a un clasificador, llamando al método fit() del clasificador.


Aquí está la lista completa de conjuntos de datos proporcionados por el módulo sklearn.datasets con su tamaño y uso previsto:

Cargar con Descripción tamaño Uso
load_boston() Conjunto de datos de precios de la vivienda de Boston 506 regresión
load_breast_cancer() Conjunto de datos de Wisconsin sobre el cáncer de mama 569 clasificación (binario)
load_diabetes() Conjunto de datos de la diabetes 442 regresión
load_digits(n_class) Conjunto de datos de dígitos 1797 clasificación
load_iris() Conjunto de datos de iris 150 clasificación (multi-clase)
load_linnerud() Conjunto de datos linnerud 20 regresión multivariada

Tenga en cuenta que (fuente: http://scikit-learn.org/stable/datasets/) :

Estos conjuntos de datos son útiles para ilustrar rápidamente el comportamiento de los diversos algoritmos implementados en el scikit. Sin embargo, a menudo son demasiado pequeños para ser representativos de las tareas de aprendizaje automático del mundo real.

Además de estos conjuntos de datos de muestra de juguetes sklearn.datasets , sklearn.datasets también proporciona funciones de utilidad para cargar conjuntos de datos externos:

  • load_mlcomp para cargar conjuntos de datos de muestra desde el repositorio mlcomp.org (tenga en cuenta que los conjuntos de datos deben descargarse antes). Aquí hay un ejemplo de uso.
  • fetch_lfw_pairs y fetch_lfw_people para cargar el conjunto de datos de pares de fetch_lfw_pairs fetch_lfw_people the Wild (LFW) de http://vis-www.cs.umass.edu/lfw/ , que se utiliza para la verificación de la cara (resp. reconocimiento de la cara). Este conjunto de datos es más grande que 200 MB. Aquí hay un ejemplo de uso.

Entrena un clasificador con validación cruzada

Usando el conjunto de datos del iris:

import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']
 

Los datos se dividen en conjuntos de trenes y pruebas. Para hacer esto, usamos la función de utilidad train_test_split para dividir tanto X como y (datos y vectores objetivo) al azar con la opción train_size=0.75 (los conjuntos de entrenamiento contienen el 75% de los datos).

Los conjuntos de datos de entrenamiento se introducen en un clasificador de vecinos más cercano a k . El método de fit del clasificador ajustará el modelo a los datos.

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75) 
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)
 

Finalmente prediciendo la calidad en la muestra de prueba:

clf.score(X_test, y_test) # Output: 0.94736842105263153
 

Al utilizar un par de conjuntos de trenes y pruebas, podríamos obtener una estimación sesgada de la calidad del clasificador debido a la elección arbitraria de la división de datos. Mediante el uso de la validación cruzada , podemos ajustar el clasificador en diferentes subconjuntos de trenes / pruebas de los datos y hacer un promedio de todos los resultados de precisión. La función cross_val_score ajusta un clasificador a los datos de entrada mediante validación cruzada. Puede tomar como entrada el número de diferentes divisiones (pliegues) que se utilizarán (5 en el ejemplo a continuación).

from sklearn.cross_validation import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
print(scores)
# Output: array([ 0.96666667,  0.96666667,  0.93333333,  0.96666667,  1.        ])
print "Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() / 2)
# Output: Accuracy: 0.97 (+/- 0.03)