scikit-learn
Clasificación
Buscar..
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:
Supongamos que trabajamos en un espacio 2D. Primero, creamos algunos datos:
import numpy as np
Ahora creamos x y y :
x0, x1 = np.random.randn(10, 2), np.random.randn(10, 2) + (1, 1)
x = np.vstack((x0, x1))
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) .
Para construir un clasificador, podemos utilizar:
from sklearn import svm
svm.SVC(kernel='linear').fit(x, y)
Veamos la predicción para (0, 0) :
>>> svm.SVC(kernel='linear').fit(x, y).predict([[0, 0]])
array([0])
La predicción es que la clase es 0.
Para la regresión, igualmente podemos hacer:
svm.SVR(kernel='linear').fit(x, y)
RandomForestClassifier
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.
Un ejemplo de uso simple:
Importar:
from sklearn.ensemble import RandomForestClassifier
Definir los datos del tren y los datos de destino:
train = [[1,2,3],[2,5,1],[2,1,7]]
target = [0,1,0]
Los valores en target
representan la etiqueta que desea predecir.
Inicie un objeto RandomForest y realice el aprendizaje (ajuste):
rf = RandomForestClassifier(n_estimators=100)
rf.fit(train, target)
Predecir:
test = [2,2,3]
predicted = rf.predict(test)
Análisis de informes de clasificación
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).
Ejemplo de documentos de sklearn
:
from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
Salida -
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
avg / total 0.70 0.60 0.61 5
GradientBoostingClassifier
Gradient Boosting para la clasificación. El clasificador de aumento de gradiente es un conjunto aditivo de un modelo base cuyo error se corrige en iteraciones (o etapas) sucesivas mediante la adición de árboles de regresión que corrigen los residuos (el error de la etapa anterior).
Importar:
from sklearn.ensemble import GradientBoostingClassifier
Crear algunos datos de clasificación de juguetes
from sklearn.datasets import load_iris
iris_dataset = load_iris()
X, y = iris_dataset.data, iris_dataset.target
Vamos a dividir estos datos en conjunto de entrenamiento y pruebas.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=0)
Cree una instancia de un modelo GradientBoostingClassifier
utilizando los parámetros predeterminados.
gbc = GradientBoostingClassifier()
gbc.fit(X_train, y_train)
Vamos a anotarlo en el conjunto de prueba
# We are using the default classification accuracy score
>>> gbc.score(X_test, y_test)
1
Por defecto hay 100 estimadores construidos.
>>> gbc.n_estimators
100
Esto se puede controlar estableciendo n_estimators
en un valor diferente durante el tiempo de inicialización.
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.
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.
from sklearn.tree import DecisionTreeClassifier
# Define training and target set for the classifier
train = [[1,2,3],[2,5,1],[2,1,7]]
target = [10,20,30]
# 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)
# Test classifier with other, unknown feature vector
test = [2,2,3]
predicted = dectree.predict(test)
print predicted
La salida se puede visualizar usando:
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")
Clasificación mediante regresión logística
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
from sklearn.linear_model import LogisticRegression
La implementación de Sklearn LR puede ajustarse a regresión logística binaria, One-vs-Rest o multinomial con la regularización opcional de L2 o L1. Por ejemplo, consideremos una clasificación binaria en un conjunto de datos de sklearn de muestra
from sklearn.datasets import make_hastie_10_2
X,y = make_hastie_10_2(n_samples=1000)
Donde X es una matriz de n_samples X 10
y y son las etiquetas de destino -1 o +1.
Utilice la división de prueba de tren para dividir los datos de entrada en conjuntos de prueba y entrenamiento (70% -30%)
from sklearn.model_selection import train_test_split
#sklearn.cross_validation in older scikit versions
data_train, data_test, labels_train, labels_test = train_test_split(X,y, test_size=0.3)
Usar el clasificador LR es similar a otros ejemplos
# Initialize Classifier.
LRC = LogisticRegression()
LRC.fit(data_train, labels_train)
# Test classifier with the test data
predicted = LRC.predict(data_test)
Usa la matriz de confusión para visualizar resultados.
from sklearn.metrics import confusion_matrix
confusion_matrix(predicted, labels_test)