scikit-learn Tutorial
Empezando con scikit-learn
Buscar..
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).
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)
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
yfetch_lfw_people
para cargar el conjunto de datos de pares defetch_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.