Scikit Learn Es
Scikit Learn Es
#scikit-learn
Tabla de contenido
Acerca de 1
Observaciones 2
Examples 2
Instalación de scikit-learn 2
Creando tuberías 3
Interfaces y convenciones: 4
Examples 7
Capítulo 3: Clasificación 10
Examples 10
RandomForestClassifier 10
GradientBoostingClassifier 12
Un árbol de decisión 12
Examples 15
Capítulo 5: Regresión 17
Examples 17
Examples 19
Examples 21
Validación cruzada 21
K-Fold 22
ShuffleSplit 22
Creditos 24
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: scikit-learn
It is an unofficial and free scikit-learn ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official scikit-learn.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/es/home 1
Capítulo 1: Empezando 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
Examples
Instalación de scikit-learn
Durante la mayor instalación pip gestor de paquetes Python puede instalar Python y todas sus
dependencias:
Sin embargo, para los sistemas Linux, se recomienda utilizar el conda paquetes conda para evitar
posibles procesos de compilación.
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).
import sklearn.datasets
https://riptutorial.com/es/home 2
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).
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).
Creando tuberías
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:
https://riptutorial.com/es/home 3
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:
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)
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.
import sklearn.datasets
https://riptutorial.com/es/home 4
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:
clasificación (multi-
load_iris() Conjunto de datos de iris 150
clase)
regresión
load_linnerud() Conjunto de datos linnerud 20
multivariada
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
https://riptutorial.com/es/home 5
demasiado pequeños para ser representativos de las tareas de aprendizaje
automático del mundo real.
https://riptutorial.com/es/home 6
Capítulo 2: Característica de funcionamiento
del receptor (ROC)
Examples
Introducción a ROC y AUC
Ejemplo de métrica de Característica operativa del receptor (ROC) para evaluar la calidad de
salida del clasificador.
Las curvas ROC suelen presentar una tasa de verdaderos positivos en el eje Y, y una tasa de
falsos positivos en el eje X. Esto significa que la esquina superior izquierda de la gráfica es el
punto "ideal": una tasa de falsos positivos de cero y una verdadera tasa de positivos de uno. Esto
no es muy realista, pero sí significa que un área más grande debajo de la curva (AUC) suele ser
mejor.
La "inclinación" de las curvas ROC también es importante, ya que es ideal para maximizar la tasa
de verdaderos positivos mientras minimiza la tasa de falsos positivos.
Un ejemplo simple:
import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plt
Valores de y arbitrarios: en el caso real, estos son los valores de destino pronosticados (
model.predict(x_test) ):
y = np.array([1,1,2,2,3,3,4,4,2,3])
Las puntuaciones son la precisión media en los datos de prueba y las etiquetas model.score(X,Y) ):
Trazar
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
https://riptutorial.com/es/home 7
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
Salida:
Uno necesita las probabilidades pronosticadas para calcular la puntuación ROC-AUC (área bajo
la curva). El cross_val_predict utiliza los métodos de predict de los clasificadores. Para poder
obtener el puntaje ROC-AUC, uno puede simplemente subclasificar el clasificador, anulando el
método de predict , para que actúe como predict_proba .
https://riptutorial.com/es/home 8
from sklearn.cross_validation import cross_val_predict
from sklearn.metrics import roc_auc_score
class LogisticRegressionWrapper(LogisticRegression):
def predict(self, X):
return super(LogisticRegressionWrapper, self).predict_proba(X)
salida:
https://riptutorial.com/es/home 9
Capítulo 3: Clasificación
Examples
Uso de máquinas de vectores de soporte
Las máquinas de vectores de soporte son una familia de algoritmos que intentan pasar un
hiperplano (posiblemente de alta dimensión) entre dos conjuntos de puntos etiquetados, de modo
que la distancia de los puntos desde el plano sea óptima en algún sentido. Las SVM se pueden
usar para clasificación o regresión (correspondientes a sklearn.svm.SVC y sklearn.svm.SVR ,
respectivamente).
Ejemplo:
import numpy as np
Ahora creamos x y y :
y = [0] * 10 + [1] * 10
Tenga en cuenta que x se compone de dos gaussianos: uno centrado alrededor (0, 0) y otro
centrado alrededor (1, 1) .
svm.SVC(kernel='linear').fit(x, y)
svm.SVR(kernel='linear').fit(x, y)
RandomForestClassifier
https://riptutorial.com/es/home 10
Un bosque aleatorio es un meta estimador que se ajusta a una serie de clasificadores de árboles
de decisión en varias submuestras del conjunto de datos y utiliza el promedio para mejorar la
precisión predictiva y el ajuste excesivo del control.
Importar:
train = [[1,2,3],[2,5,1],[2,1,7]]
target = [0,1,0]
rf = RandomForestClassifier(n_estimators=100)
rf.fit(train, target)
Predecir:
test = [2,2,3]
predicted = rf.predict(test)
Cree un informe de texto que muestre las principales métricas de clasificación, incluidas la
precisión y la recuperación , la puntuación f1 (la media armónica de la precisión y la recuperación)
y el soporte (el número de observaciones de esa clase en el conjunto de entrenamiento).
Salida -
https://riptutorial.com/es/home 11
GradientBoostingClassifier
Importar:
iris_dataset = load_iris()
X, y = iris_dataset.data, iris_dataset.target
gbc = GradientBoostingClassifier()
gbc.fit(X_train, y_train)
>>> gbc.n_estimators
100
Un árbol de decisión
Un árbol de decisión es un clasificador que usa una secuencia de reglas detalladas (como a> 7)
que se pueden entender fácilmente.
https://riptutorial.com/es/home 12
El siguiente ejemplo entrena a un clasificador de árbol de decisión usando tres vectores de
características de longitud 3, y luego predice el resultado para un cuarto vector de características
hasta ahora desconocido, el llamado vector de prueba.
# Initialize Classifier.
# Random values are initialized with always the same random seed of value 0
# (allows reproducible results)
dectree = DecisionTreeClassifier(random_state=0)
dectree.fit(train, target)
print predicted
import pydot
import StringIO
dotfile = StringIO.StringIO()
tree.export_graphviz(dectree, out_file=dotfile)
(graph,)=pydot.graph_from_dot_data(dotfile.getvalue())
graph.write_png("dtree.png")
graph.write_pdf("dtree.pdf")
En el clasificador LR, las probabilidades que describen los posibles resultados de un solo ensayo
se modelan utilizando una función logística. Se implementa en la librería linear_model
X,y = make_hastie_10_2(n_samples=1000)
Utilice la división de prueba de tren para dividir los datos de entrada en conjuntos de prueba y
entrenamiento (70% -30%)
https://riptutorial.com/es/home 13
from sklearn.model_selection import train_test_split
#sklearn.cross_validation in older scikit versions
# Initialize Classifier.
LRC = LogisticRegression()
LRC.fit(data_train, labels_train)
confusion_matrix(predicted, labels_test)
https://riptutorial.com/es/home 14
Capítulo 4: Reducción de la dimensionalidad
(selección de características)
Examples
Reduciendo la dimensión con el análisis de componentes principales
Una técnica de reducción de dimensión común es usar solo las k primeras de tales
combinaciones lineales. Supongamos que las entidades son una matriz X de n filas y m
columnas. Las primeras k combinaciones lineales forman una matriz β k de m filas yk columnas.
El producto X β tiene n filas yk columnas. Por lo tanto, la matriz β k resultante puede considerarse
una reducción de las dimensiones de m a k , reteniendo las partes de alta varianza de la matriz X
original.
import numpy as np
np.random.seed(123) # we'll set a random seed so that our results are reproducible
X = np.hstack((np.random.randn(100, 2) + (10, 10), 0.001 * np.random.randn(100, 5)))
Ahora vamos a ver los resultados. Primero, aquí están las combinaciones lineales:
pca.components_
# array([[ -2.84271217e-01, -9.58743893e-01, -8.25412629e-05,
# 1.96237855e-05, -1.25862328e-05, 8.27127496e-05,
# -9.46906600e-05],
# [ -9.58743890e-01, 2.84271223e-01, -7.33055823e-05,
# -1.23188872e-04, -1.82458739e-05, 5.50383246e-05,
# 1.96503690e-05]])
Observe que los dos primeros componentes de cada vector son varios órdenes de magnitud más
grandes que los otros, lo que demuestra que la PCA reconoció que la varianza está contenida
https://riptutorial.com/es/home 15
principalmente en las dos primeras columnas.
Para verificar la relación de la varianza explicada por este PCA, podemos examinar
pca.explained_variance_ratio_ :
pca.explained_variance_ratio_
# array([ 0.57039059, 0.42960728])
https://riptutorial.com/es/home 16
Capítulo 5: Regresión
Examples
Mínimos cuadrados ordinarios
Ordinary Least Squares es un método para encontrar la combinación lineal de características que
mejor se ajuste al resultado observado en el siguiente sentido.
min β | y ^ - y | 2 2 ,
Contexto de aplicación
Ejemplo
LinearRegression un modelo lineal con algo de ruido, luego veamos si LinearRegression arregla
para reconstruir el modelo lineal.
import numpy as np
X = np.random.randn(100, 3)
Tenga en cuenta que la verdadera combinación lineal que genera y está dada por `beta.
https://riptutorial.com/es/home 17
array([ 9.97768469e-01, 9.98237634e-01, 7.55016533e-04])
https://riptutorial.com/es/home 18
Capítulo 6: Selección de características
Examples
Eliminación de características de baja variación
Su idea subyacente es que si una característica es constante (es decir, tiene una variación de 0),
no se puede usar para encontrar patrones interesantes y se puede eliminar del conjunto de datos.
X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]
Hay 3 características booleanas aquí, cada una con 6 instancias. Supongamos que deseamos
eliminar aquellos que son constantes en al menos el 80% de las instancias. Algunos cálculos de
probabilidad muestran que estas características deberán tener una varianza inferior a 0.8 * (1 -
0.8) . En consecuencia, podemos utilizar
Este método se debe usar con precaución porque una variación baja no significa necesariamente
que una característica no sea interesante. Considere el siguiente ejemplo en el que construimos
un conjunto de datos que contiene 3 características, las dos primeras consisten en variables
distribuidas al azar y la tercera en variables distribuidas uniformemente.
# generate dataset
np.random.seed(0)
feat1 = np.random.normal(loc=0, scale=.1, size=100) # normal dist. with mean=0 and std=.1
feat2 = np.random.normal(loc=0, scale=10, size=100) # normal dist. with mean=0 and std=10
feat3 = np.random.uniform(low=0, high=10, size=100) # uniform dist. in the interval [0,10)
data = np.column_stack((feat1,feat2,feat3))
https://riptutorial.com/es/home 19
data[:5]
# Output:
# array([[ 0.17640523, 18.83150697, 9.61936379],
# [ 0.04001572, -13.47759061, 2.92147527],
# [ 0.0978738 , -12.70484998, 2.4082878 ],
# [ 0.22408932, 9.69396708, 1.00293942],
# [ 0.1867558 , -11.73123405, 0.1642963 ]])
np.var(data, axis=0)
# Output: array([ 1.01582662e-02, 1.07053580e+02, 9.07187722e+00])
sel = VarianceThreshold(threshold=0.1)
sel.fit_transform(data)[:5]
# Output:
# array([[ 18.83150697, 9.61936379],
# [-13.47759061, 2.92147527],
# [-12.70484998, 2.4082878 ],
# [ 9.69396708, 1.00293942],
# [-11.73123405, 0.1642963 ]])
https://riptutorial.com/es/home 20
Capítulo 7: Selección de modelo
Examples
Validación cruzada
Aprender los parámetros de una función de predicción y probarla con los mismos datos es un
error metodológico: un modelo que simplemente repetiría las etiquetas de las muestras que acaba
de ver tendría una puntuación perfecta pero no podría predecir nada útil aún. datos invisibles Esta
situación se llama sobreajuste . Para evitarlo, es una práctica común cuando se realiza un
experimento de aprendizaje automático (supervisado) para mantener parte de los datos
disponibles como un conjunto de prueba X_test, y_test . Tenga en cuenta que la palabra
"experimento" no pretende indicar solo el uso académico, porque incluso en entornos
comerciales, el aprendizaje automático generalmente comienza de manera experimental.
https://riptutorial.com/es/home 21
único de división de tren / prueba. Básicamente, se divide todo el conjunto de datos en K
"pliegues" de igual tamaño, y cada pliegue se usa una vez para probar el modelo y K-1 veces
para entrenar el modelo.
Múltiples técnicas de plegado están disponibles con la biblioteca de scikit. Su uso depende de las
características de los datos de entrada. Algunos ejemplos son
K-Fold
Básicamente, se divide todo el conjunto de datos en K "pliegues" de igual tamaño, y cada pliegue
se usa una vez para probar el modelo y K-1 veces para entrenar el modelo.
TRAIN: [2 3] TEST: [0 1]
TRAIN: [0 1 3] TEST: [2]
TRAIN: [0 1 2] TEST: [3]
StratifiedKFoldes una variación de k-fold que devuelve pliegues estratificados: cada conjunto
contiene aproximadamente el mismo porcentaje de muestras de cada clase objetivo que el
conjunto completo
ShuffleSplit
Se utiliza para generar un número definido por el usuario de divisiones independientes de
conjuntos de datos de prueba / tren. Las muestras se barajan primero y luego se dividen en un
par de conjuntos de prueba y tren.
https://riptutorial.com/es/home 22
Otras técnicas de plegado como Leave One / p Out, y TimeSeriesSplit (una variación de K-fold)
están disponibles en la biblioteca scikit model_selection.
https://riptutorial.com/es/home 23
Creditos
S.
Capítulos Contributors
No
Empezando con Alleo, Ami Tavory, Community, Gabe, Gal Dreiman, panty,
1
scikit-learn Sean Easter, user2314737
Característica de
2 funcionamiento del Gal Dreiman, Gorkem Ozkaya
receptor (ROC)
Reducción de la
dimensionalidad Ami Tavory, DataSwede, Gal Dreiman, Sean Easter,
4
(selección de user2314737
características)
Selección de
6 Ami Tavory, user2314737
características
https://riptutorial.com/es/home 24