Aprendizaje automático-Notas de estudio de Sklearn-Capítulo general

Escribir al frente

El contenido del documento oficial de Sklearn es bastante detallado, pero no parece muy fácil de aprender para los principiantes.
Esta serie de "notas de estudio" se compila con referencia a la documentación oficial de Sklearn. La estructura permanece básicamente sin cambios y el contenido rara vez se elimina (demasiado detallado y "sesgado"), por lo que puede consultarlo y revisarlo más tarde.

Inserte la descripción de la imagen aquí

0. Primeros pasos

Scikit-learn es una biblioteca de aprendizaje automático de código abierto que admite el aprendizaje supervisado y no supervisado. También proporciona varias herramientas para el ajuste de modelos, preprocesamiento de datos, selección y evaluación de modelos y muchas otras herramientas.

0.1 Ajuste y predicción: la base del estimador (salida)

(Ajuste y predicción: conceptos básicos del estimador)

  • Una gran cantidad de algoritmos y modelos de aprendizaje automático integrados proporcionados en Scikit-learn se denominan estimadores .
  • Cada estimador puede usar su método fit () para ajustar los datos.
  • fit (X) → y, la función fit () recibe dos entradas
  • El formato de X: (n_samples, n_features) , es decir, filas de muestra y filas de características.
  • El valor de y es un número real (tarea de regresión) o entero (tarea de clasificación);
  • Tanto X como y deben ser matrices numerosas o tipos de datos similares a matrices.

Adecuado:

>>> from sklearn.ensemble import RandomForestClassifier
>>> clf = RandomForestClassifier(random_state=0)
>>> X = [[ 1,  2,  3],  # 2 samples, 3 features
...      [11, 12, 13]]
>>> y = [0, 1]  # classes of each sample
>>> clf.fit(X, y)
RandomForestClassifier(random_state=0)

predicción:

>>> clf.predict(X)  # predict classes of the training data
array([0, 1])
>>> clf.predict([[4, 5, 6], [14, 15, 16]])  # predict classes of new data
array([0, 1])

0.2 Convertidor y preprocesador (entrada)

(Transformadores y preprocesadores)

La canalización general (canalización) incluye dos partes:
Preprocesador como entrada : ¿
Transformar o "imputar?" Datos
Predictor como salida : predecir el valor objetivo Predictor (predictor)

>>> from sklearn.preprocessing import StandardScaler
>>> X = [[0, 15],
...      [1, -10]]
>>> StandardScaler().fit(X).transform(X)
array([[-1.,  1.],
       [ 1., -1.]])

0.3 Pipeline: preprocesador y evaluador vinculados

El convertidor y el evaluador / predictor están integrados en un todo unificado (objeto): Pipeline, a saber:

Transformadores + estimadores (predictores) = Pipeline

Nota: Los estimadores y predictores en Sklearn-learn deben ser directamente equivalentes (estimadores (predictores))

ejemplo:

>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.metrics import accuracy_score
...
>>> # create a pipeline object
>>> pipe = make_pipeline(
...     StandardScaler(),
...     LogisticRegression(random_state=0)
... )
...
>>> # load the iris dataset and split it into train and test sets
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
...
>>> # fit the whole pipeline
>>> pipe.fit(X_train, y_train)
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression(random_state=0))])
>>> # we can now use it like any other estimator
>>> accuracy_score(pipe.predict(X_test), y_test)
0.97...

0.4 Evaluación del modelo

(Evaluación del modelo)

Una vez completado el entrenamiento del modelo, el modelo debe evaluarse inmediatamente, en lugar de predecir directamente los "nuevos datos" invisibles.
Lo que usamos anteriormente es el método train_test_split () para dividir el conjunto de datos en conjunto de entrenamiento y conjunto de prueba, pero hay muchas otras herramientas en scikit-learn para la verificación del modelo, especialmente la validación cruzada.

Tome la validación cruzada de 5 veces como ejemplo:

>>> from sklearn.datasets import make_regression
>>> from sklearn.linear_model import LinearRegression
>>> from sklearn.model_selection import cross_validate
...
>>> X, y = make_regression(n_samples=1000, random_state=0)
>>> lr = LinearRegression()
...
>>> result = cross_validate(lr, X, y)  # defaults to 5-fold CV
>>> result['test_score']  # r_squared score is high because dataset is easy
array([1., 1., 1., 1., 1.])

0.5 Búsqueda automática de parámetros

Todos los evaluadores tienen parámetros (o hiperparámetros ) y se pueden depurar. En circunstancias normales, no sabemos cómo elegir los valores de los parámetros, porque están determinados por los datos que tenemos en nuestras manos .

Sklearn proporciona algunas herramientas que pueden encontrar automáticamente la combinación óptima de parámetros (mediante validación cruzada). Tomemos el objeto RandomizedSearchCV como ejemplo. Una vez finalizada la búsqueda, RandomizedSearchCV se convierte en un rol similar a RandomForestRegressor: ha sido entrenado por la combinación óptima de parámetros.

>>> from sklearn.datasets import fetch_california_housing
>>> from sklearn.ensemble import RandomForestRegressor
>>> from sklearn.model_selection import RandomizedSearchCV
>>> from sklearn.model_selection import train_test_split
>>> from scipy.stats import randint
...
>>> X, y = fetch_california_housing(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
...
>>> # define the parameter space that will be searched over
>>> param_distributions = {
    
    'n_estimators': randint(1, 5),
...                        'max_depth': randint(5, 10)}
...
>>> # now create a searchCV object and fit it to the data
>>> search = RandomizedSearchCV(estimator=RandomForestRegressor(random_state=0),
...                             n_iter=5,
...                             param_distributions=param_distributions,
...                             random_state=0)
>>> search.fit(X_train, y_train)
RandomizedSearchCV(estimator=RandomForestRegressor(random_state=0), n_iter=5,
                   param_distributions={
    
    'max_depth': ...,
                                        'n_estimators': ...},
                   random_state=0)
>>> search.best_params_
{
    
    'max_depth': 9, 'n_estimators': 4}

>>> # the search object now acts like a normal random forest estimator
>>> # with max_depth=9 and n_estimators=4
>>> search.score(X_test, y_test)
0.73...

Nota: Busque a través de una canalización en lugar de un evaluador separado.

Nota:
En la práctica, casi siempre desea buscar en una canalización, en lugar de un solo estimador. Una de las principales razones es que si aplica un paso de preprocesamiento a todo el conjunto de datos sin utilizar una canalización y luego realiza cualquier tipo de validación cruzada, estaría rompiendo el supuesto fundamental de independencia entre los datos de entrenamiento y de prueba. De hecho, dado que procesó previamente los datos utilizando el conjunto de datos completo, parte de la información sobre los conjuntos de prueba está disponible para los conjuntos de trenes. Esto conducirá a sobreestimar el poder de generalización del estimador (puede leer más en esta publicación de Kaggle).
El uso de una canalización para la validación cruzada y la búsqueda lo mantendrá alejado de este error común.

1. Pretratamiento

Notas de estudio de Sklearn (1) -preprocesamiento de datos

2. Selección de modelo

Notas del estudio de Sklearn (2) selección y evaluación del modelo

3. Algoritmo

3.1 Clasificación

3.2 Regresión

3.3 Agrupación

3.4 Reducción de dimensionalidad

API

Referencia de API

Utilice sklearn para estudiar la minería de datos
Inserte la descripción de la imagen aquí
~

Escribir al final

En el futuro, continuaremos actualizando la serie "Resumen de aprendizaje" como una síntesis y resumen de la serie.

referencia:

  1. Scikit-aprender
  2. Scikit-learn en chino
  3. Notas de aprendizaje automático de Python: aprendizaje de la biblioteca sklearn

Supongo que te gusta

Origin blog.csdn.net/Robin_Pi/article/details/103971999
Recomendado
Clasificación