Redes Neurais em IA e Deep Learning - página 69

 

5.6 Canalizaciones de Scikit-learn (L05: Aprendizaje automático con Scikit-Learn)



5.6 Canalizaciones de Scikit-learn (L05: Aprendizaje automático con Scikit-Learn)

Muy bien, todos, finalmente hemos llegado a la última parte de la lección 5, que es, en mi opinión, la más interesante: canales sagrados de aprendizaje. Estas canalizaciones son objetos o clases increíblemente útiles que nos permiten combinar el procesamiento de datos y los pasos de predicción sin problemas. Para brindarle una descripción general, presentaré un diagrama de flujo de cómo funcionan las canalizaciones, aunque todavía no profundizaré en todos los detalles.

Piense en una canalización como un estimador con una API transformadora. Similar a un estimador, una canalización tiene un método de ajuste que podemos usar en el conjunto de entrenamiento. Internamente, la canalización pasa por varios pasos de ajuste y transformación y finalmente llega al paso de ajuste final. Dependiendo de lo que definamos en nuestra tubería, puede realizar varias tareas, como el escalado de datos (por ejemplo, estandarización o escalado mínimo-máximo), reducción de dimensionalidad, entrenamiento de un algoritmo de aprendizaje y devolución de un modelo predictivo que podemos usar en el conjunto de prueba. .

Cuando llamamos al método de predicción en el conjunto de prueba, similar a la API del estimador, la canalización usa internamente el paso de transformación para aplicar la misma escala que se realizó en el conjunto de entrenamiento. Esto asegura la consistencia en el procesamiento de datos. Finalmente, la tubería usa el modelo ajustado para hacer predicciones, como devolver etiquetas de clase en el caso de un clasificador.

Permítanme ilustrar esto con un ejemplo de código simple de una canalización. Aquí, estoy creando una tubería usando la función make_pipeline del submódulo sklearn.pipeline de Sacred Learn. Esta es una manera conveniente de crear canalizaciones. En este ejemplo, estoy construyendo una canalización básica que consta de un escalador estándar y un clasificador de vecino más cercano K. El escalador estándar, como discutimos en el video anterior, estandariza los datos haciendo que tengan media cero y varianza unitaria. Inicializamos el escalador estándar y el clasificador vecino más cercano K como componentes de la canalización.

Una vez que se crea la tubería, podemos usar el método de ajuste para entrenar la tubería en los datos de entrenamiento. Luego, podemos usar el método de predicción para hacer predicciones en el conjunto de prueba. Cuando llamamos al ajuste, la tubería primero aplica el escalador estándar para conocer la media y la desviación estándar de los datos de entrenamiento. A continuación, utiliza esta información para escalar los datos, que se pasan al siguiente paso, el clasificador de K-vecino más cercano. El clasificador recibe el conjunto de entrenamiento estandarizado y realiza su algoritmo de aprendizaje.

Durante la predicción, ocurre el mismo proceso, excepto que no hay necesidad de un paso de ajuste. La canalización reutiliza las estadísticas aprendidas durante el entrenamiento para escalar los datos de prueba y aplica el clasificador aprendido para hacer predicciones.

En resumen, una canalización nos permite encadenar varios objetos, como transformadores y estimadores, para crear un flujo de trabajo cohesivo. Proporciona una manera conveniente y eficiente de manejar el procesamiento de datos y los pasos de predicción en tareas de aprendizaje automático.

Ahora, echemos un vistazo a una canalización en acción aplicando el método de retención simple para la selección del modelo. La selección del modelo implica ajustar hiperparámetros para seleccionar el mejor modelo. En el método de reserva, dividimos los datos en un conjunto de entrenamiento y un conjunto de prueba. Dentro del conjunto de entrenamiento, lo dividimos aún más en un subconjunto para el aprendizaje y otro subconjunto para la validación, donde evaluamos diferentes modelos con varias configuraciones de hiperparámetros.

En scikit-learn, podemos realizar el método de retención y el ajuste de hiperparámetros mediante un método llamado búsqueda en cuadrícula. La búsqueda en cuadrícula implica crear una cuadrícula de parámetros que define las combinaciones de hiperparámetros que queremos evaluar. Por ejemplo, en el caso de k-vecinos más cercanos, podemos considerar diferentes valores para el número de vecinos (k) y la métrica de distancia (p). La búsqueda en cuadrícula itera sobre todas las combinaciones posibles, ajustando los modelos en el conjunto de entrenamiento y evaluándolos en el conjunto de validación.

Aunque la búsqueda en cuadrícula se usa normalmente con la validación cruzada de K-fold, en este ejemplo, nos centraremos en el método de exclusión. Para aplicar el método de exclusión y la búsqueda en cuadrícula mediante una canalización, podemos utilizar la clase GridSearchCV de scikit-learn. Esta clase nos permite definir la grilla de parámetros y el pipeline, y maneja el proceso de ajustar los modelos y evaluarlos.

Aquí hay un fragmento de código de ejemplo para demostrar cómo usar GridSearchCV con una canalización:

 from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline

# Load the iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a pipeline
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier())

# Define the parameter grid for grid search
param_grid = { 'kneighborsclassifier__n_neighbors' : [ 3 , 5 , 7 ],
               'kneighborsclassifier__weights' : [ 'uniform' , 'distance' ]}

# Create a GridSearchCV object
grid_search = GridSearchCV(pipeline, param_grid, cv= 5 )

# Fit the models and perform grid search
grid_search.fit(X_train, y_train)

# Print the best parameters and best score
print( "Best Parameters: " , grid_search.best_params_)
print( "Best Score: " , grid_search.best_score_)

# Evaluate the best model on the test set
best_model = grid_search.best_estimator_
accuracy = best_model.score(X_test, y_test)
print( "Test Accuracy: " , accuracy)
En este ejemplo, comenzamos cargando el conjunto de datos de Iris y dividiéndolo en conjuntos de entrenamiento y prueba usando la función train_test_split. Luego, creamos una canalización usando make_pipeline, que consta de un StandardScaler para el escalado de datos y un KNeighborsClassifier como estimador.

A continuación, definimos el parámetro grid param_grid que especifica las diferentes combinaciones de hiperparámetros que queremos evaluar. En este caso, variamos el número de vecinos (n_neighbors) y la función de ponderación (pesos) para el clasificador de K vecinos más cercanos. Tenga en cuenta que los nombres de los parámetros en la cuadrícula tienen el prefijo del nombre del componente de canalización seguido de un guión bajo doble (__).

Creamos un objeto GridSearchCV, pasando la canalización, la cuadrícula de parámetros y el número deseado de pliegues de validación cruzada (cv). La clase GridSearchCV realiza automáticamente la búsqueda de la cuadrícula ajustando la canalización en los datos de entrenamiento y evaluando los modelos en el conjunto de validación.

Una vez completada la búsqueda en la cuadrícula, podemos acceder a los mejores parámetros y la mejor puntuación utilizando los atributos best_params_ y best_score_ del objeto GridSearchCV. Imprimimos estos valores para ver qué combinación de hiperparámetros produjo el mejor rendimiento.

Finalmente, evaluamos el mejor modelo en el conjunto de prueba accediendo a él desde el atributo best_estimator_ del objeto GridSearchCV y calculando la precisión usando el método de puntuación.

Este ejemplo demuestra cómo podemos aprovechar las canalizaciones y la búsqueda de cuadrículas para explorar de manera eficiente diferentes configuraciones de hiperparámetros y seleccionar el mejor modelo mediante el método de exclusión. Al combinar los pasos de procesamiento de datos y el entrenamiento de modelos dentro de una canalización, podemos optimizar el flujo de trabajo de aprendizaje automático y experimentar fácilmente con diferentes componentes e hiperparámetros.

5.6 Scikit-learn Pipelines (L05: Machine Learning with Scikit-Learn)
5.6 Scikit-learn Pipelines (L05: Machine Learning with Scikit-Learn)
  • 2020.09.30
  • www.youtube.com
I aleady mentioned that scikit-learn is a well-designed Python library, right?! In this video, I will show you another reason why that's true. Scikit-learn i...
 

6.1 Introducción a los árboles de decisión (L06: Árboles de decisión)



6.1 Introducción a los árboles de decisión (L06: Árboles de decisión)

Finalmente, vamos a cubrir un nuevo tema: los árboles de decisión. Los algoritmos de árboles de decisión se pueden considerar como métodos de construcción iterativos de arriba hacia abajo para clasificadores y modelos de regresión. Para mantener los videos manejables y no demasiado largos, he dividido la conferencia en siete partes.

En la primera parte, proporcionaremos una breve descripción general de los árboles de decisión, su representación conceptual e introduciremos la terminología básica. A continuación, analizaremos los algoritmos recursivos en el contexto de los árboles de decisión y explicaremos brevemente qué son los algoritmos recursivos. Esta comprensión nos ayudará a analizar la complejidad del tiempo de ejecución (Big O) de los árboles de decisión.

Más adelante, exploraremos diferentes tipos de árboles de decisión. Actualmente, el segundo alumno implementa el algoritmo de árbol de decisiones CART (Classification and Regression Trees) desarrollado por Leo Breiman. Sin embargo, existen otros algoritmos como ID3 y C4.5, cada uno con sus propias ventajas y desventajas. Nos referiremos a estos diferentes métodos y podríamos asignar un ejercicio de tarea, posiblemente implementando el árbol de decisión ID3.

Dentro de la lección, también exploraremos varios criterios de división utilizados para los árboles de decisión. Actualmente, el segundo alumno usa CART, que generalmente se basa en la impureza de Gini. Sin embargo, permite mezclar y combinar diferentes criterios de división. Estos criterios de división se refieren a las funciones o medidas utilizadas para determinar una buena característica para dividir un árbol de decisión. Cubriremos los criterios de impureza y entropía de Gini y discutiremos por qué se prefieren sobre el error de clasificación errónea al evaluar el crecimiento del árbol y la calidad de la división.

Una vez que hayamos cubierto estos detalles, profundizaremos en las mejoras que pueden hacer que los árboles de decisión sean más eficientes en términos de tiempo de ejecución computacional y precisión de clasificación. También abordaremos el desafío del sobreajuste y exploraremos técnicas para mitigarlo.

Por último, proporcionaremos un ejemplo de código que demuestra cómo trabajar con árboles de decisión en scikit-learn, una popular biblioteca de aprendizaje automático. Este ejemplo práctico ayudará a solidificar su comprensión de los árboles de decisión y su implementación.

Ahora, profundicemos en el concepto básico de un árbol de decisiones. Si bien no es estrictamente un problema de aprendizaje automático, los árboles de decisión se relacionan con escenarios de la vida cotidiana que involucran la toma de decisiones. Por ejemplo, podemos considerar la decisión de qué hacer en un momento dado. Si tenemos trabajo que hacer, podemos optar por quedarnos adentro y completar el trabajo. Por el contrario, si no tenemos ningún trabajo pendiente, podemos considerar salir a la calle, dependiendo de las condiciones meteorológicas.

Digamos que, si hace sol y no hace demasiado frío, podemos optar por ir a la playa. Sin embargo, si está nublado, podríamos optar por salir a correr. En caso de lluvia o nieve, podríamos preguntar a nuestros amigos sobre su disponibilidad. Si nuestros amigos están ocupados, podemos decidir quedarnos adentro y participar en actividades como leer un libro. Por otro lado, si nuestros amigos están libres, podemos explorar opciones como ir al cine, jugar videojuegos en línea o tener un chat en línea.

Este esquema básico representa un árbol de decisión, donde cada nodo corresponde a una pregunta o decisión, y las ramas conducen a diferentes opciones. El nodo raíz representa la primera pregunta o decisión del árbol, mientras que los nodos hoja son los resultados finales. Los nodos internos son las decisiones intermediarias que guían el flujo del árbol.

Además, los nodos en un árbol de decisión se pueden categorizar en nodos binarios o de múltiples categorías. Los nodos binarios ofrecen solo dos opciones, mientras que los nodos de varias categorías admiten más de dos opciones. Sin embargo, las divisiones de varias categorías se pueden convertir en divisiones binarias, como se explicó anteriormente.

Los árboles de decisión también se pueden interpretar como conjuntos de reglas, similares a las declaraciones if-else en programación. De hecho, los árboles de decisión se pueden convertir en conjuntos de reglas, aunque la conversión inversa no siempre es posible. Esta característica de los árboles de decisión los hace altamente interpretables y explicables, lo cual es crucial en dominios donde la interpretabilidad y la explicabilidad son importantes, como en los dominios legal y médico.

Para construir un árbol de decisión, necesitamos un conjunto de datos que contenga ejemplos de entradas y salidas correspondientes. Cada ejemplo consta de un conjunto de características (también conocidas como atributos o predictores) y una variable de destino (la salida que queremos predecir). El algoritmo del árbol de decisión analiza las características y sus relaciones para determinar la mejor manera de dividir los datos y hacer predicciones.

El proceso de creación de un árbol de decisión implica seleccionar la mejor función para dividir los datos en cada nodo. El objetivo es encontrar la característica que proporcione la mayor ganancia de información o la mejor división en términos de precisión de clasificación. Este proceso generalmente se realiza de forma recursiva, comenzando desde el nodo raíz y continuando hasta los nodos hoja.

En cada paso, el algoritmo evalúa diferentes criterios de división, como la impureza o la entropía de Gini. La impureza de Gini mide la probabilidad de clasificar erróneamente un elemento elegido al azar del conjunto, mientras que la entropía mide la cantidad promedio de información requerida para identificar la etiqueta de clase de un elemento elegido al azar del conjunto. Estos criterios ayudan a determinar la pureza de los subconjuntos resultantes después de una división.

Una vez que se selecciona una función para dividir, los datos se dividen en subconjuntos en función de los posibles valores de la función. Este proceso se repite recursivamente para cada subconjunto hasta que se cumple un criterio de parada. El criterio de parada podría ser alcanzar una profundidad de árbol máxima, alcanzar un número mínimo de muestras en un nodo de hoja o lograr un cierto nivel de pureza en los nodos de hoja.

Para predecir la variable de destino para una nueva instancia utilizando un árbol de decisión entrenado, comenzamos en el nodo raíz y recorremos el árbol siguiendo las ramas apropiadas en función de los valores de características de la instancia. Eventualmente, llegamos a un nodo hoja, que proporciona el resultado previsto.

Los árboles de decisión tienen varias ventajas. Son fáciles de entender e interpretar, lo que los convierte en una opción popular para visualizar y explicar el proceso de toma de decisiones. Pueden manejar funciones tanto numéricas como categóricas, y se pueden usar tanto para tareas de clasificación como de regresión. Los árboles de decisión también son resistentes a los valores perdidos y los valores atípicos, ya que pueden manejarlos de manera efectiva durante el proceso de división.

Sin embargo, los árboles de decisión también tienen algunas limitaciones. Pueden sobreajustar fácilmente los datos de entrenamiento, lo que resulta en una mala generalización a ejemplos no vistos. Esto se puede mitigar mediante el uso de técnicas de poda o empleando métodos de conjunto como bosques aleatorios o aumento de gradiente. Los árboles de decisión también son sensibles a pequeños cambios en los datos de entrenamiento y se pueden generar diferentes divisiones para conjuntos de datos similares. Además, los árboles de decisión pueden tener dificultades para capturar relaciones complejas entre características.

En conclusión, los árboles de decisión son modelos poderosos e interpretables que pueden usarse para tareas de clasificación y regresión. Proporcionan un marco claro para la toma de decisiones al representar los datos como una estructura de árbol con nodos y ramas. La elección de los criterios de división y los criterios de parada, junto con las técnicas para manejar el sobreajuste, juegan un papel importante en la construcción de árboles de decisión precisos y sólidos.

6.1 Intro to Decision Trees (L06: Decision Trees)
6.1 Intro to Decision Trees (L06: Decision Trees)
  • 2020.10.04
  • www.youtube.com
Decision trees are one of the fundamental methods for machine learning on tabular data. Decision trees are the main algorithm behind popular methods such as ...
 

6.2 Recursive algorithms & Big-O (L06: Decision Trees)



6.2 Recursive algorithms & Big-O (L06: Decision Trees)

In this video, our discussion revolves around recursive algorithms, which are closely connected to the concept of divide and conquer. Divide and conquer involves breaking down a problem into smaller subproblems, solving them individually, and then combining the solutions. Decision tree training and prediction, as well as various divide and conquer algorithms, are linked to this concept. Recursion is a common technique used to implement divide and conquer algorithms, although it's not the only approach.

To grasp the idea of recursion, let's examine an example of a recursive algorithm implemented in Python. For the sake of discussion, I have intentionally hidden the actual name of the function to encourage you to analyze its purpose before we delve into its details. I encourage you to take a moment to think about what this function might do. You can pause the video or even experiment with it in a Jupyter notebook to understand its behavior.

Assuming you've taken the time to analyze it, let's explore the function together. This particular function operates on Python lists. For instance, consider a list like [1, 2, 3]. The purpose of this function is to determine the length of an array or list. Let's examine how it works. The function takes an input, denoted as 'X' here, and checks two conditions. First, it checks if the list is empty. If it is, the function returns 0 because an empty list has a length of zero, which acts as the stopping condition. Otherwise, if the list is not empty, the function returns 1 and calls itself with a smaller input.

If this seems abstract, let's break it down step by step. Suppose we start with a complete list, such as [1, 2, 3]. Initially, the function checks if the list is empty, which it isn't. Consequently, it proceeds to the 'else' statement, where it returns 1 and recursively calls itself with a smaller input. In this case, the input becomes [2, 3] since we remove the first element from the original list. We repeat the process: the function returns 1 again, calls itself with the new input [3], and ultimately calls itself with an empty list.

Upon reaching the empty list, the function once again checks the 'if' condition, which is now true. As a result, it returns 0. When we evaluate the entire expression, we obtain the value 3. Therefore, this function computes the length of an array using recursion, where the function calls itself within its own definition. It's worth noting that while recursion is a conceptually elegant solution in computer science theory, it may not always be the most practical approach for implementation. In Python, recursion has limitations on the number of self-calls, and excessively large lists can cause a Stack Overflow error.

Moving on, let's explore another example that employs recursion. Here, we tackle a divide and conquer problem—sorting a list or array—using the quicksort algorithm. Similar to the previous function, quicksort uses recursion as a means of implementation. The algorithm employs a stopping condition, where the function returns the array as is if it contains fewer than two elements. Otherwise, the algorithm executes the main section of the code.

How does quicksort work? First, we select a pivot, typically the first element of the array. Then, we create two new lists: one to hold the elements smaller than the pivot and another for the elements larger than the pivot. We iterate through the array, excluding the pivot, and distribute each element to either the smaller or larger list based on its comparison with the pivot. Next, we recursively call quicksort on both the smaller and larger lists, using the pivot as the central element. Eventually, the

recursive calls will reach the stopping condition when the lists have fewer than two elements. At that point, the function simply returns the sorted lists.

Let's walk through an example to understand the process. Suppose we have an unsorted list [7, 2, 5, 1, 9, 3]. The quicksort algorithm will proceed as follows:

  1. The pivot is selected as the first element, which is 7.
  2. Two empty lists, smaller and larger, are created.
  3. Iterate through the list, excluding the pivot:
    • 2 is smaller than 7, so it goes into the smaller list.
    • 5 is smaller than 7, so it goes into the smaller list.
    • 1 is smaller than 7, so it goes into the smaller list.
    • 9 is larger than 7, so it goes into the larger list.
    • 3 is smaller than 7, so it goes into the smaller list.
  4. Recursively call quicksort on both the smaller and larger lists.
    • For the smaller list: [2, 5, 1, 3]
      • Select 2 as the pivot and create empty lists.
      • Iterate through the list:
        • 5 is larger than 2, so it goes into the larger list.
        • 1 is smaller than 2, so it goes into the smaller list.
        • 3 is larger than 2, so it goes into the larger list.
      • Recursively call quicksort on both the smaller and larger lists.
        • For the smaller list: [1]
          • The list has fewer than two elements, so it's returned as is.
        • For the larger list: [5, 3]
          • Select 5 as the pivot and create empty lists.
          • Iterate through the list:
            • 3 is smaller than 5, so it goes into the smaller list.
          • Recursively call quicksort on both the smaller and larger lists.
            • For the smaller list: [3]
              • The list has fewer than two elements, so it's returned as is.
            • For the larger list: [5]
              • The list has fewer than two elements, so it's returned as is.
      • The final sorted smaller list is [1].
      • The final sorted larger list is [3, 5].
    • For the larger list: [9]
      • The list has fewer than two elements, so it's returned as is.
  5. The final sorted smaller list is [1].
  6. The final sorted larger list is [3, 5, 9].
  7. Concatenate the sorted smaller list, pivot (7), and the sorted larger list.
    • The sorted list becomes [1, 3, 5, 7, 9].

By recursively dividing the list into smaller sublists and sorting them, the quicksort algorithm efficiently sorts the entire list.

In conclusion, recursive algorithms play a crucial role in divide and conquer approaches. They break down problems into smaller subproblems and solve them individually, eventually combining the solutions to solve the original problem. Recursive functions call themselves within their own definition, repeatedly working on smaller inputs until reaching a stopping condition. However, it's important to consider the termination condition to avoid infinite recursion and ensure the algorithm converges to a solution.

6.2 Recursive algorithms & Big-O (L06: Decision Trees)
6.2 Recursive algorithms & Big-O (L06: Decision Trees)
  • 2020.10.04
  • www.youtube.com
To help understand how we can implement decision trees neatly, it's worthwhile taking this little detour and learn about recursive algorithms.-------This vid...
 

6.3 Types of decision trees (L06: Decision Trees)



6.3 Types of decision trees (L06: Decision Trees)

In the previous videos, we focused on introducing decision trees and recursive algorithms. Now, let's delve into different types of decision trees. We'll explore how altering certain design choices can lead to different implementations of decision tree algorithms.

First, let's recap the generic decision tree algorithm in pseudocode, which we discussed in the previous video. We dealt with a binary classification problem, where the class labels were only 1 and 0. Our tree followed a binary structure, involving binary splitting. This means that each node was divided into exactly two child nodes. Additionally, we only considered binary features, where the feature values could be either 0 or 1.

However, as we demonstrated earlier using the decision tree visualization in scikit-learn, we can also utilize continuous features and convert them into binary splits. For example, we can select a feature, let's call it xj, and split it into two parts using a threshold, denoted as 't'. This splitting criterion can be defined as xj smaller than t or xj greater or equal to t, which can be represented as true or false. This allows us to perform a binary split even with continuous features, as we can adjust the decision threshold during the splitting process. You will have an opportunity to work on such a split in the homework.

Now, let's focus on the decision tree algorithm implementation. At each node in the decision tree, we consider a single feature, denoted as xj, where 'j' ranges from 1 to m, representing up to m features. When we split a parent node into two child nodes, let's say child zero and child one, we need to determine which feature to choose for splitting. For continuous features, we also need to consider the decision threshold, where we compare if xj is greater than or equal to a specific value 't'. Selecting the appropriate feature and threshold is crucial, and we require a measure of goodness to evaluate the quality of a split.

To summarize the generic tree growing algorithm, we select the feature that results in the largest information gain when the parent node is split. Information gain is a measure of goodness for a split. The higher the information gain, the better the split and the feature chosen, including its splitting threshold for continuous features. In the next video, we will discuss two commonly used measures to assess the goodness of a split: entropy and Gini impurity.

The algorithm follows certain stopping conditions. It stops if the child nodes are pure, meaning all the data points within a node have the same class label. Alternatively, it halts if the information gain is less than or equal to zero, indicating no improvement. Once we reach a pure node or fail to make progress, we stop growing the tree further.

After growing the decision tree, we can use it to make predictions. Suppose we have a tree with multiple levels, comprising parent and leaf nodes. To predict the class label of a new data point, we traverse the tree based on the feature values of the data point. At each node, we follow the corresponding branch based on the feature conditions until we reach a leaf node. For leaf nodes, we use the majority vote approach to determine the class label. This means we predict the class label that appears most frequently within that leaf node.

It's important to note that decision trees can handle both binary and multi-class classification problems. The pseudocode we discussed in the previous slides focused on binary classification, but decision trees can handle an arbitrary number of class labels. The majority vote approach is applicable regardless of the number of classes.

When developing decision tree algorithms, we encounter various design choices. One crucial question is how to split the nodes. We need to define the criterion for splitting and determine how to compare and evaluate different splits. The two commonly used measures for assessing the quality of a split are entropy and Gini impurity.

Entropy is a measure of the impurity or disorder within a node. It quantifies the uncertainty associated with the class labels of the data points in that node. The entropy of a node is calculated using the following formula:

Entropy(node) = - sum(p(i) * log2(p(i))), for all classes i

where p(i) represents the proportion of data points in the node that belong to class i. The entropy value ranges from 0 to 1, where 0 indicates a pure node (all data points belong to the same class) and 1 indicates maximum impurity (equal distribution of data points across all classes).

To evaluate the quality of a split, we compute the weighted average of the entropy values for the resulting child nodes. This is known as the information gain. The information gain is calculated as follows:

Information Gain = Entropy(parent) - sum((|Sv| / |S|) * Entropy(Sv)), for all child nodes v

where Entropy(parent) is the entropy of the parent node, |Sv| represents the number of data points in child node v, and |S| is the total number of data points in the parent node. The information gain measures the reduction in entropy achieved by splitting the node based on a particular feature.

Gini impurity is another measure used for assessing the quality of a split. It quantifies the probability of misclassifying a randomly chosen data point in a node if we assign a class label based on the distribution of class labels in that node. The Gini impurity of a node is calculated using the following formula:

Gini(node) = 1 - sum(p(i)^2), for all classes i

where p(i) represents the proportion of data points in the node that belong to class i. Similar to entropy, the Gini impurity value ranges from 0 to 1, where 0 indicates a pure node and 1 indicates maximum impurity.

To evaluate the quality of a split, we calculate the weighted average of the Gini impurity values for the resulting child nodes. This is known as the Gini impurity index. The Gini impurity index is calculated as follows:

Gini Index = sum((|Sv| / |S|) * Gini(Sv)), for all child nodes v

where |Sv| represents the number of data points in child node v, and |S| is the total number of data points in the parent node. The Gini index measures the reduction in Gini impurity achieved by splitting the node based on a particular feature.

Both entropy and Gini impurity are commonly used in decision tree algorithms, and the choice between them depends on the specific problem and data characteristics. In scikit-learn, you can select the criterion parameter to specify either 'entropy' or 'gini' when building decision tree models.

In the next video, we will delve deeper into these measures and discuss how to use them to determine the best splits in a decision tree algorithm.

6.3 Types of decision trees (L06: Decision Trees)
6.3 Types of decision trees (L06: Decision Trees)
  • 2020.10.06
  • www.youtube.com
Most often, we use CART decision trees in practice. However, there are more than just one type of decision tree out there as we will see in this video.------...
 

6.4 Criterios de división (L06: Árboles de decisión)



6.4 Criterios de división (L06: Árboles de decisión)

En el video, el orador profundiza en las complejidades de los árboles de decisión e introduce el concepto de división de criterios dentro de este marco. Los criterios de división son esencialmente los criterios o medidas empleados para determinar la función más adecuada para dividir un nodo principal en sus nodos secundarios. Por lo general, un conjunto de datos abarca múltiples características, indicadas como x1, x2, x3, ..., xm, donde j representa un valor que va de 1 a m.

El orador enfatiza que en cada nodo del árbol de decisiones, se debe tomar una decisión crítica con respecto a la función que se utilizará para el proceso de división. Para identificar la característica óptima, se definen ciertos criterios o medidas para comparar y evaluar las características disponibles. El objetivo es seleccionar una característica que produzca una mejor división, mejorando así la precisión predictiva del árbol de decisión.

Para ilustrar el funcionamiento de los árboles de decisión, el orador presenta un conjunto de datos de juguete que consta de tres características: x1, x2, x3 y una columna que indica la etiqueta de clase, y. Las etiquetas de clase en este conjunto de datos son binarias y toman los valores de ceros o unos. El orador señala que al emplear solo dos características, es factible lograr una precisión de entrenamiento del 100 % para este conjunto de datos en particular.

Desafiando a la audiencia, el orador les pide que encuentren dos reglas basadas en las tres características que pueden conducir a una precisión de entrenamiento del 100 %. Sugieren pausar el video para contemplar la solución. Posteriormente, el orador revela la solución, explicando que solo x1 y x2 son las características relevantes y útiles, mientras que x3 es aparentemente aleatoria y no contribuye a la precisión.

Avanzando, el orador representa visualmente el conjunto de datos trazando los valores de x1 y x2 en un gráfico. Los puntos rojos en el gráfico representan puntos de datos que pertenecen a la etiqueta de clase uno, mientras que los cuadrados azules representan puntos de datos etiquetados como cero. Con base en el patrón observado en los puntos de datos, el orador procede a crear una división, lo que resulta en la formación de un árbol de decisión.

La división inicial se basa en que x1 es mayor que 5,5. Esta división divide los datos en dos regiones, una etiquetada como azul y la otra roja. El orador señala que si bien esta división clasifica correctamente algunos puntos de datos, también clasifica incorrectamente otros. La subsiguiente división se basa en que x2 es mayor que 10,5. Esto refina aún más el proceso de clasificación y, en última instancia, conduce a un árbol de decisiones que logra una precisión de entrenamiento del 100 %.

Para mejorar la claridad, el orador proporciona una representación visual más clara del árbol de decisión, aclarando la información asociada con cada nodo. Cada nodo simboliza un nodo principal que se divide, lo que da como resultado la creación de nodos secundarios. Para cada nodo, se muestran el valor de división (representado por el valor de la característica y el umbral), la entropía (una medida del contenido de la información), la cantidad de ejemplos de capacitación (muestras), la distribución de la etiqueta de clase (lugar) y la clase mayoritaria.

El árbol de decisiones se representa en una estructura jerárquica, con nodos principales que dan lugar a nodos secundarios. El orador subraya la importancia de cada nodo y destaca que los árboles de decisión emplean estos nodos para hacer predicciones basadas en las características de entrada.

Por último, el orador menciona un enfoque alternativo para lograr una precisión de entrenamiento del 100 % utilizando únicamente la función dos. Demuestran un árbol de decisión basado en este enfoque alternativo, mostrando cómo la característica dos se puede dividir en valores 7.5 y 10 para segregar con precisión los puntos de datos en las clases deseadas.

En un escenario ideal donde tenemos características continuas y umbrales establecidos correctamente, se aplicarían los conceptos antes mencionados. En lugar de usar la variable "V", emplearíamos una variable xj, que representa una característica continua que es menor o igual a un umbral. El segundo nodo secundario simbolizaría valores mayores que el umbral. En este caso, si poseemos características continuas, se puede emplear una fórmula similar a la anterior, pero ahora necesitamos incorporar un valor de umbral en la función. Podemos comparar los valores para comprobar si son mayores o iguales al umbral.

Por lo tanto, si tenemos una función continua y un árbol binario similar a CART (Árbol de clasificación y regresión), solo necesitamos sumar dos nodos secundarios en lugar de varios. Un nodo secundario corresponde a valores mayores que el umbral, mientras que el otro representa valores menores o iguales al umbral. Esta simplificación es lógica ya que nos concentramos en los dos posibles resultados basados en el valor umbral. Sin embargo, es crucial reconocer que esta explicación puede parecer densa, y un aspecto importante que aún falta es el concepto de entropía, que se explorará en las siguientes diapositivas.

En este contexto, la entropía pertenece a la entropía de Shannon, introducida por Claude Shannon en el ámbito de la teoría de la información. Se diferencia de la entropía empleada en biofísica o termodinámica. La entropía de Shannon sirve como métrica para cuantificar la impureza o el desorden de los nodos secundarios dentro de los árboles de decisión. Cuantifica la cantidad de información transmitida por una variable aleatoria discreta que posee dos resultados, similar a una distribución de Bernoulli. En la distribución de Bernoulli, un parámetro de probabilidad denotado como p representa la probabilidad de que ocurra un evento.

Shannon definió la información como el número de bits necesarios para codificar el valor 1/p. En términos más simples, mide el nivel de certeza o incertidumbre asociado con un evento. El número de bits necesarios se puede calcular como el logaritmo en base 2 de 1/p. A medida que aumenta la probabilidad p, disminuye el número de bits necesarios, lo que indica un mayor grado de certeza. Por el contrario, a medida que la probabilidad se aproxima a cero, el número de bits necesarios aumenta, lo que implica un mayor nivel de incertidumbre.

Para ejemplificar este concepto, consideremos algunos ejemplos. Si tenemos una probabilidad de 0,5, el número de bits necesarios sería 1. Si la probabilidad es 0, el número de bits necesarios sería infinito, lo que significa certeza absoluta. Por el contrario, si la probabilidad es 1, el número de bits necesarios sería 0, lo que indica una incertidumbre total. Por lo tanto, el rango de valores para el término -log2(p) se extiende desde menos infinito hasta 0.

La entropía de Shannon se calcula como la información promedio de todos los eventos posibles. Representa el promedio ponderado de la información asociada a cada evento, siendo los pesos las respectivas probabilidades de los eventos. En el caso de los árboles de decisión, el concepto de entropía se puede aplicar para medir la impureza de un nodo secundario. Si un nodo exhibe una distribución equilibrada de etiquetas de clase, poseerá una mayor entropía, lo que significa una mayor impureza. Por el contrario, si un nodo muestra una distribución sesgada donde domina una clase, poseerá una entropía más baja, lo que indica una impureza más baja. Esta noción se alinea intuitivamente, ya que un nodo con mayor impureza proporciona menos información para propósitos de clasificación.

La entropía ofrece un medio para medir la impureza o el desorden dentro de los nodos secundarios de los árboles de decisión. Permite la evaluación de la pureza de un nodo en función de la distribución de etiquetas de clase. Un nodo con mayor entropía sugiere una distribución más diversa, mientras que un nodo con menor entropía indica una distribución más homogénea. Al considerar la entropía de los nodos secundarios, se pueden tomar decisiones más informadas al construir árboles de decisión.

6.4 Splitting criteria (L06: Decision Trees)
6.4 Splitting criteria (L06: Decision Trees)
  • 2020.10.07
  • www.youtube.com
machine learning, scikit-learn
 

6.5 Gini y Entropía frente a errores de clasificación (L06: Árboles de decisión)


6.5 Gini y Entropía frente a errores de clasificación (L06: Árboles de decisión)

En el video anterior, discutimos los diversos criterios de división que se pueden usar para hacer crecer un árbol de decisión. Ahora, profundicemos en por qué dos de los criterios de división, a saber, la impureza de Gini y la entropía, son preferibles al tercer criterio, el error de clasificación.

En resumen, tenemos tres medidas de impureza: entropía, entropía escalada (escala de 0,5 para comparar con la impureza de Gini) y error de clasificación. La forma de estas medidas de impurezas difiere. La entropía aparece como una función cóncava, mientras que el error de clasificación errónea tiene un pico pronunciado de 0,5 con pendientes lineales.

Surge la pregunta: ¿por qué usamos la entropía y la impureza de Gini en lugar del error de clasificación errónea para hacer crecer los árboles de decisión? Esta pregunta se aplica no solo a la entropía sino también a la impureza de Gini. En este video, nos centraremos en la entropía, pero el concepto se aplica igualmente a la impureza de Gini.

Consideremos la ecuación de ganancia de información. Tenemos una función de impureza para el nodo principal, que representa el conjunto de datos D en el nodo principal. Cuando dividimos este conjunto de datos en función de los valores de las características, generamos diferentes nodos secundarios. Este concepto se aplica tanto a las características categóricas como a las continuas. Para las funciones continuas, podemos dividir mediante la creación de contenedores basados en un umbral.

La medida de impureza se usa tanto para el nodo principal como para el secundario, y los sumamos considerando el tamaño del conjunto de datos original en el nodo principal y el nodo secundario actual. Generalmente, si elegimos una medida de impureza para el padre, también la mantenemos constante para los nodos secundarios.

En la práctica, tendemos a evitar el error de clasificación errónea, ya que tiene una desventaja, que discutiremos en este video. Revisemos brevemente cómo se calculan la entropía y el error de clasificación. La entropía se calcula sumando el producto de la proporción de etiquetas para cada clase y el logaritmo de la proporción. Por otro lado, el error de clasificación errónea se basa en la pérdida 0/1, que mide la proporción de etiquetas clasificadas incorrectamente.

Ahora, centrándonos en la entropía frente al error de clasificación errónea, una diferencia clave son sus formas. La entropía es cóncava, mientras que el error de clasificación errónea no lo es. Esta diferencia influye en por qué se favorece la entropía sobre el error de clasificación errónea para los árboles de decisión en crecimiento.

Para ilustrar esto, consideremos un conjunto de datos de juguete simple. En el nodo principal, tenemos 40 ejemplos de clase uno y 80 ejemplos de clase cero. Si dividimos el conjunto de datos en función de los valores de las características, terminamos con nodos secundarios que tienen diferentes distribuciones de clase. Necesitamos evaluar si esta división mejora la pureza de los nodos en comparación con el padre.

Si calculamos la entropía de los nodos padre e hijo, encontramos que la entropía del nodo hijo dos es menor que la del padre, lo que indica una mayor pureza. Sin embargo, el nodo secundario uno es peor que el principal. En promedio, necesitamos determinar si la división es beneficiosa.

Para medir la calidad de la división, usamos la ganancia de información, que considera los valores de entropía para los nodos padre e hijo. Si la ganancia de información es positiva, indica una buena división. En nuestro ejemplo, la ganancia de información es positiva, lo que indica una división favorable basada en la entropía.

Ahora, examinemos el mismo escenario usando un error de clasificación. El error para el padre, el nodo secundario uno y el nodo secundario dos se calcula en función de la proporción de etiquetas mal clasificadas. Si reemplazamos estos valores de error en la fórmula de ganancia de información, encontramos que la ganancia de información es cero. Una ganancia de información cero implica que la división no es beneficiosa. En consecuencia, estos nodos no existirán y tendríamos que considerar otras características.

En conclusión, la razón principal por la que se prefiere la entropía al error de clasificación errónea para los árboles de decisión en crecimiento es que la entropía captura la incertidumbre y el desorden en los datos de manera más efectiva. La forma cóncava de la entropía permite una mejor diferenciación entre diferentes distribuciones de clases y proporciona una medida de impureza más matizada. Por otro lado, el error de clasificación errónea es una medida más simple que solo considera la proporción de etiquetas mal clasificadas y no captura la incertidumbre y la distribución de las clases.

La forma cóncava de la entropía le permite penalizar tanto los pequeños como los grandes desequilibrios de clase. Es sensible a los cambios en las proporciones de las clases, dando mayor peso a las clases distribuidas de manera más uniforme. Esta propiedad hace que la entropía sea particularmente útil cuando se trata de conjuntos de datos que tienen distribuciones de clases desequilibradas.

Por el contrario, el error de clasificación errónea tiene una forma lineal, con un pico agudo en 0,5. Trata todas las clasificaciones erróneas por igual y no distingue entre diferentes grados de clasificación errónea. Esto hace que el error de clasificación errónea sea más sensible a los desequilibrios de clase y menos eficaz en escenarios con conjuntos de datos desequilibrados.

Además, la diferencia de formas entre la entropía y el error de clasificación errónea afecta el proceso de aprendizaje del árbol de decisión. Los árboles de decisión tienen como objetivo encontrar divisiones que maximicen la ganancia de información o disminuyan la impureza. Dado que la entropía proporciona una medida más detallada de la impureza, permite que los árboles de decisión realicen divisiones más informadas y precisas.

Al usar la entropía como medida de impureza, los árboles de decisión pueden capturar relaciones complejas entre entidades y clases. Pueden manejar características continuas y categóricas y pueden descubrir patrones intrincados en los datos.

En resumen, se prefiere la entropía sobre el error de clasificación para los árboles de decisión en crecimiento porque captura la incertidumbre y el desorden en los datos de manera más efectiva. Su forma cóncava permite una mejor diferenciación entre diferentes distribuciones de clases y es más resistente a conjuntos de datos desequilibrados. Mediante el uso de la entropía, los árboles de decisión pueden realizar divisiones más informadas y capturar relaciones complejas entre entidades y clases.

6.5 Gini & Entropy versus misclassification error (L06: Decision Trees)
6.5 Gini & Entropy versus misclassification error (L06: Decision Trees)
  • 2020.10.15
  • www.youtube.com
This video explains why we use entropy (or Gini) instead of the misclassification error as impurity metric in the information gain equation of CART decision ...
 

6.6 Mejoras y tratamiento del sobreajuste (L06: Árboles de decisión)



6.6 Mejoras y tratamiento del sobreajuste (L06: Árboles de decisión)

En el video anterior, discutimos los diferentes criterios de división que se pueden usar para hacer crecer un árbol de decisión. Ahora, profundizaremos en por qué dos de los criterios de división, a saber, la impureza de Gini y la entropía, se prefieren al tercer criterio, el error de clasificación.

Para refrescar nuestra memoria, recordemos los tres criterios de división: entropía, entropía escalada (para compararla con la impureza de Gini) y error de clasificación. La forma de estas medidas de impurezas se puede visualizar de la siguiente manera: la entropía es una función cóncava, representada por una línea negra alta; la entropía escalada también es cóncava y se obtiene multiplicando la entropía por 0,5; y el error de clasificación errónea muestra un pico pronunciado en 0,5 y pendientes lineales.

Ahora, surge la pregunta: ¿por qué preferimos usar la entropía y la impureza de Gini en lugar del error de clasificación errónea al hacer crecer árboles de decisión? Esta pregunta se aplica tanto a la entropía como a la impureza de Gini, pero para simplificar, nos centraremos en la entropía en esta discusión.

Recapitulemos la ecuación de ganancia de información. Comenzamos con un nodo principal, denominado D, y dividimos este conjunto de datos según los valores de las características, creando diferentes nodos secundarios. La función de impureza se usa tanto para los nodos principal como para el secundario, y sumamos los valores de impureza teniendo en cuenta el tamaño de los conjuntos de datos. Si elegimos la entropía para el nodo principal, también usamos la entropía para los nodos secundarios. El mismo principio se aplica a la impureza de Gini.

En la práctica, preferiríamos no usar el error de clasificación errónea porque tiene una desventaja, que exploraremos en este video. Para comprender mejor esto, revisemos brevemente las fórmulas para la entropía, la impureza de Gini y el error de clasificación errónea.

La entropía se calcula reemplazando las proporciones de las etiquetas de clase y sumándolas. Utiliza logaritmos y está representado por la fórmula donde sumamos las clases y multiplicamos la proporción de cada clase por el logaritmo de esa proporción.

La impureza de Gini, por otro lado, eleva al cuadrado la proporción de la etiqueta de clase y la resta de uno. Evita el uso de logaritmos y se denota como 1 menos la suma de las proporciones de las etiquetas de clase al cuadrado.

El error de clasificación errónea se basa en la pérdida 0-1, que mide la proporción de etiquetas clasificadas incorrectamente. Por ejemplo, si tenemos un nodo con etiquetas 001111, el voto mayoritario predeciría 0 porque es la clase mayoritaria. Sin embargo, considerando la distribución, solo estaríamos en lo correcto cuatro de seis veces, lo que resultaría en una precisión de 4/6 o 66,6 %. El error sería 2/6 o 33,3%.

Para comparar la entropía y el error de clasificación errónea, observamos que la entropía es cóncava, mientras que el error de clasificación errónea muestra un pico pronunciado en 0,5 y pendientes lineales. Esta diferencia es crucial para comprender por qué se prefiere la entropía al error de clasificación errónea para los árboles de decisión en crecimiento.

Para ilustrar esto, consideremos un conjunto de datos de juguete simple con un nodo principal que contiene 40 ejemplos de la clase uno y 80 ejemplos de la clase cero. Suponiendo que la mejor característica para dividir es x1, dividimos el conjunto de datos en función de si los valores de la característica son uno o cero. Obtenemos dos nodos secundarios: el nodo secundario uno y el nodo secundario dos. Al analizar la distribución de clases, encontramos que el nodo hijo dos es más puro que el padre, mientras que el nodo hijo uno es peor.

La pregunta clave es si vale la pena dividir esta característica o no. Para determinar esto, calculamos la ganancia de información utilizando la entropía. Calculamos los valores de entropía para el padre, el nodo hijo uno y el nodo hijo dos. Comparando estos valores, observamos que el nodo hijo dos es mejor, mientras que el nodo hijo uno es peor que el padre. Al aplicar la fórmula de ganancia de información, encontramos que la ganancia de información para esta división es positiva, lo que indica que la división mejora la pureza general del conjunto de datos.

Ahora, consideremos el error de clasificación errónea como la medida de impureza en lugar de la entropía. Calculamos el error de clasificación errónea para el padre, el nodo secundario uno y el nodo secundario dos. Al comparar estos valores, encontramos que el nodo secundario dos tiene un error de clasificación errónea más bajo que el padre, mientras que el nodo secundario uno tiene un error de clasificación errónea más alto.

Sin embargo, cuando calculamos la ganancia de información utilizando el error de clasificación errónea, nos encontramos con un problema. La fórmula de ganancia de información implica restar los errores de clasificación errónea ponderados de los nodos secundarios del error de clasificación errónea del padre. Dado que el error de clasificación errónea es una función lineal, la ganancia de información puede ser negativa si el error de clasificación errónea de los nodos secundarios es mayor que el del padre.

En nuestro ejemplo, aunque el nodo secundario dos tiene un error de clasificación errónea menor que el principal, el error de clasificación errónea del nodo secundario uno es mayor, lo que da como resultado una ganancia de información negativa. Esto significa que usar el error de clasificación errónea como medida de impureza desalentaría la división, aunque mejora la pureza de uno de los nodos secundarios.

Por otro lado, cuando usamos la entropía o la impureza de Gini como medidas de impureza, la ganancia de información siempre será no negativa. Tanto la entropía como la impureza de Gini son funciones cóncavas, lo que significa que los valores de impureza de los nodos secundarios siempre son menores o iguales que el valor de impureza del nodo principal. Esto garantiza que la ganancia de información sea positiva siempre que la división mejore la pureza de al menos un nodo secundario.

Al usar la entropía o la impureza de Gini como medidas de impureza, los árboles de decisión pueden dividirse en función de la ganancia de información, lo que proporciona un enfoque basado en principios para hacer crecer el árbol y mejorar su poder predictivo. El error de clasificación errónea, por otro lado, puede conducir a divisiones subóptimas y árboles de decisión menos precisos.

En resumen, la preferencia por la entropía y la impureza de Gini sobre el error de clasificación errónea en los algoritmos de árboles de decisión se basa en sus propiedades matemáticas. La naturaleza cóncava de la entropía y la impureza de Gini aseguran que la ganancia de información sea positiva para las divisiones que mejoran la pureza de los nodos secundarios, mientras que la naturaleza lineal del error de clasificación errónea puede generar ganancias de información negativas y divisiones subóptimas.

6.6 Improvements & dealing with overfitting (L06: Decision Trees)
6.6 Improvements & dealing with overfitting (L06: Decision Trees)
  • 2020.10.15
  • www.youtube.com
This video covers some issues with decision trees (like overfitting) and discusses some improvements such as the gain ratio, pre-pruning, and post-pruning.--...
 

6.7 Ejemplo de código que implementa árboles de decisión en Scikit-Learn (L06: Árboles de decisión)



6.7 Ejemplo de código que implementa árboles de decisión en Scikit-Learn (L06: Árboles de decisión)

Para concluir la lección seis, ahora examinaremos un ejemplo de código usando scikit-learn, centrándonos específicamente en el algoritmo del árbol de decisiones. Scikit-learn se recomienda para proyectos de aprendizaje automático del mundo real debido a su velocidad, eficiencia y solidez. Si bien usaremos scikit-learn para esta demostración, vale la pena mencionar que implementará un árbol de decisiones desde cero para la tarea para mejorar su comprensión del algoritmo.

Para comenzar, importemos los paquetes necesarios, incluido el paquete de marca de agua, que nos ayudará a rastrear las versiones del software que se está utilizando. Esto puede ser útil en caso de que surjan problemas al ejecutar el código debido a versiones de software obsoletas. A continuación, cargamos el conjunto de datos del iris, un conjunto de datos popular que se usa a menudo para tareas de clasificación. Al utilizar un conjunto de datos conocido como iris, podemos centrarnos más en comprender el código y su funcionalidad en lugar de explicar los datos.

Dividimos el conjunto de datos en conjuntos de entrenamiento y prueba, con el 30 % de los datos asignados para la prueba. Es importante tener en cuenta que no realizaremos ningún ajuste en este portátil. Aunque es posible ajustar los hiperparámetros del árbol de decisión mediante técnicas como la búsqueda en cuadrícula, por ahora lo mantendremos simple y omitiremos el ajuste. Por lo tanto, no necesitamos un conjunto de validación separado, ya que entrenaremos el árbol de decisión únicamente en el conjunto de entrenamiento y evaluaremos su rendimiento en el conjunto de prueba.

Pasando al trazado de las regiones de decisión, inicializamos el clasificador del árbol de decisión y establecemos los hiperparámetros. En este caso, elegimos el criterio de entropía para la ganancia de información y establecemos la profundidad máxima en dos con fines educativos. Además, ajustamos el árbol de decisión a los datos de entrenamiento y trazamos las regiones de decisión. Al visualizar las regiones de decisión, podemos observar cómo el árbol de decisión separa los datos en función de las características seleccionadas.

Exploramos diferentes opciones e hiperparámetros que se pueden configurar para el clasificador del árbol de decisión. Estos incluyen el divisor, que determina cómo se realizan las divisiones en cada nodo, y los parámetros relacionados con las muestras mínimas requeridas para dividir los nodos y los nodos hoja. También hay opciones para seleccionar la medida de impureza y controlar la aleatoriedad de las divisiones. Estos hiperparámetros se pueden ajustar y ajustar en función del problema y el conjunto de datos específicos.

A continuación, procedemos a visualizar el árbol de decisión utilizando la biblioteca graphviz. Exportamos el árbol de decisión como un archivo de puntos, que representa la estructura del árbol como un gráfico. Podemos personalizar la apariencia de los nodos, bordes y etiquetas en el gráfico. Al usar la biblioteca graphviz junto con la biblioteca pydotplus, podemos trazar el árbol de decisiones directamente sin guardar el archivo de puntos por separado. De esta forma, podemos visualizar el árbol de decisión dentro del propio cuaderno.

Para mostrar el diagrama del árbol de decisión, cargamos el archivo PNG generado utilizando el módulo de visualización de ipython. Importamos la clase de imagen desde la pantalla de ipython y la usamos para cargar el archivo PNG. Esto nos permite ver el diagrama del árbol de decisión directamente en el Jupyter Notebook. El gráfico de árbol de decisión muestra las divisiones y los límites de decisión como líneas verticales y horizontales, respectivamente, en función de las características seleccionadas.

En resumen, este ejemplo de código demuestra cómo implementar y visualizar un clasificador de árbol de decisiones mediante scikit-learn. El algoritmo del árbol de decisiones proporciona un modelo interpretable para las tareas de clasificación y se puede ajustar utilizando varios hiperparámetros para mejorar el rendimiento. Visualizar el árbol de decisiones ayuda a comprender cómo el algoritmo toma decisiones en función de las características de entrada.

6.7 Code Example Implementing Decision Trees in Scikit-Learn (L06: Decision Trees)
6.7 Code Example Implementing Decision Trees in Scikit-Learn (L06: Decision Trees)
  • 2020.10.15
  • www.youtube.com
This last video of lecture 6 shows a quick demo of how to train and visualize a decision tree with scikit-learn.-------This video is part of my Introduction ...
 

7.1 Introducción a los métodos de conjunto (L07: Métodos de conjunto)


7.1 Introducción a los métodos de conjunto (L07: Métodos de conjunto)

En la conferencia de esta semana, profundizaremos en los métodos de conjunto, que son un campo crucial en el aprendizaje automático. Estos métodos se utilizan ampliamente en la investigación de aprendizaje automático aplicado para lograr un alto rendimiento en aplicaciones del mundo real. Los métodos sólidos, que son conocidos por su eficacia en la práctica, a menudo dan los mejores resultados.

La conferencia también revisará los árboles de decisión, abordando algunas preguntas planteadas en Piazza sobre su relevancia. A pesar de ser un algoritmo relativamente antiguo y familiar, los árboles de decisión siguen siendo muy relevantes en la actualidad. No solo son interpretables, sino que se emplean con frecuencia en métodos de conjunto, donde exhiben un rendimiento excepcional. La conferencia tiene como objetivo explorar este aspecto también.

Antes de profundizar en los métodos de conjunto, es importante recapitular dónde nos encontramos en el semestre. Actualmente estamos concluyendo la tercera parte, que se centra en los métodos basados en árboles. Sin embargo, vale la pena señalar que algunos de estos métodos se extienden más allá de los árboles de decisión y abarcan otras técnicas, incluidos los métodos sólidos aplicados a las redes neuronales profundas. Los árboles de decisión se han clasificado en la tercera parte debido a su estrecha asociación con la mayoría de los métodos de conjunto.

Después de completar esta sección, profundizaremos en la evaluación del modelo antes de analizar el aprendizaje no supervisado y, si el tiempo lo permite, el aprendizaje bayesiano. Aunque el plan inicial era tener el examen de mitad de período y cubrir otros métodos antes, la progresión del curso tomó más tiempo de lo previsto. No obstante, el tiempo adicional dedicado a configurar el entorno de Python y familiarizar a todos, en particular a aquellos sin una sólida formación en Python, fue beneficioso. Garantiza que todos los participantes estén en sintonía y preparados para la próxima tarea, que implicará la implementación de un árbol de decisión CART (Árboles de clasificación y regresión) sin depender de bibliotecas preconstruidas como scikit-learn.

La conferencia está estructurada en siete partes. La primera parte proporciona una introducción y una descripción general de los métodos de conjunto. Posteriormente, exploraremos varios métodos internos, comenzando con la votación por mayoría, el tipo más simple de método de conjunto. Luego profundizaremos en el embolsado, una técnica que implica el muestreo de arranque del conjunto de entrenamiento. Se explicará la utilidad de este método. También se cubrirá el impulso, que implica impulsar a los alumnos débiles (como árboles de decisión cortos) a modelos fuertes. En particular, hablaremos sobre el aumento de gradiente, uno de los algoritmos más populares en la actualidad, conocido por su éxito en las competencias de Kaggle. Se introducirán bosques aleatorios, otro método de conjunto ampliamente reconocido. Estos modelos son conocidos por su facilidad de uso, ya que a menudo ofrecen un rendimiento excelente sin un ajuste extenso de hiperparámetros. Se recomiendan para personas que buscan modelos predictivos en varios campos científicos, especialmente si carecen de experiencia en aprendizaje automático.

También se mencionarán las máquinas de vectores de soporte (SVM), en particular su popularidad en el pasado debido a su rendimiento, especialmente con los núcleos RBF (función de base radial). Sin embargo, los bosques aleatorios a menudo brindan resultados igualmente buenos o mejores sin la necesidad de un ajuste extenso, lo que los hace preferibles para aplicaciones prácticas. Por último, se discutirá el apilamiento, otra técnica popular en las aplicaciones.

Para ilustrar la importancia de los métodos de conjunto, se presentará una figura que muestra un ejemplo que involucra bosques aleatorios. Este modelo no se limita a las tareas de clasificación y puede calcular fácilmente la importancia de las características. Por ejemplo, en el ejemplo mencionado, los átomos de azufre se identificaron como las características más importantes para predecir la actividad de las moléculas. Estos conocimientos pueden ser valiosos en la práctica.

Además, los métodos de conjunto, incluidos los bosques aleatorios y el aumento de gradiente, se encuentran entre los modelos de aprendizaje automático sin aprendizaje profundo más utilizados. Aunque el aprendizaje profundo está ganando protagonismo, los conjuntos siguen siendo muy relevantes debido a su excelente rendimiento y facilidad de implementación. El artículo mencionó el surgimiento del aumento de gradiente extremo (XGBoost) como la "nueva reina" en los algoritmos de aprendizaje automático. Esto subraya la importancia de los modelos basados en árboles, en particular el aumento de gradiente, en diversas aplicaciones.

En resumen, la conferencia de esta semana proporcionará una comprensión integral de los métodos de conjunto. Cubrirá diferentes tipos de técnicas de conjuntos y sus aplicaciones.

7.1 Intro to ensemble methods (L07: Ensemble Methods)
7.1 Intro to ensemble methods (L07: Ensemble Methods)
  • 2020.10.19
  • www.youtube.com
In lecture 7, we are discussing ensemble methods, including majority voting, bagging, random forests, stacking, and gradient boosting -- those are some of th...
 

7.2 Votación mayoritaria (L07: Métodos de conjunto)


7.2 Votación mayoritaria (L07: Métodos de conjunto)

En este video, exploraremos uno de los casos fundamentales de conjuntos modelo conocidos como votación mayoritaria. A través de un ejemplo de juguete, examinaremos los beneficios de la votación por mayoría en comparación con el uso de un solo clasificador de forma aislada.

Para comenzar, consideremos un escenario en el que tenemos un problema de clasificación binaria. Tenemos un conjunto de datos que consta de varias observaciones, cada una asociada con un conjunto de características y una etiqueta de clase correspondiente. Nuestro objetivo es construir un clasificador que pueda predecir con precisión las etiquetas de clase para instancias nuevas e invisibles.

Para demostrar el concepto de votación por mayoría, comenzamos entrenando tres clasificadores individuales en nuestro conjunto de datos. Cada clasificador utiliza un algoritmo o modelo diferente para hacer predicciones. Para simplificar, supongamos que estos clasificadores son árboles de decisión.

Una vez que hemos entrenado a nuestros tres clasificadores de árboles de decisión, ahora podemos hacer predicciones sobre nuevas instancias. Sin embargo, en lugar de confiar en la predicción de un solo clasificador, empleamos el principio de votación por mayoría. En la votación por mayoría, cada clasificador del conjunto emite un voto por su etiqueta de clase predicha. La etiqueta de clase que recibe la mayor cantidad de votos se considera la predicción final del conjunto.

Ahora, veamos por qué la votación por mayoría puede ser más efectiva que usar un solo clasificador. Considere un escenario en el que cada clasificador de árbol de decisión individual tenga algún grado de error debido al ruido inherente o la variabilidad en el conjunto de datos. Estos errores pueden dar lugar a predicciones incorrectas, lo que reduce la precisión general de un único clasificador.

Sin embargo, al combinar las predicciones de múltiples clasificadores a través de la votación por mayoría, podemos mitigar potencialmente el impacto de los errores individuales. Incluso si uno o dos clasificadores del árbol de decisión hacen predicciones incorrectas, el proceso de votación por mayoría puede compensar estos errores. Es más probable que la etiqueta de clase que recibe la mayoría de los votos sea la correcta, lo que da como resultado una mayor precisión en comparación con el uso de un solo clasificador.

Para ilustrar esto, imaginemos una situación en la que dos clasificadores de árboles de decisión predicen la etiqueta de clase correcta, mientras que un clasificador hace una predicción errónea. En este caso, la etiqueta de clase correcta recibirá dos votos, mientras que la predicción errónea solo recibirá un voto. Como resultado, el proceso de votación por mayoría del conjunto identificará correctamente la etiqueta de clase con la mayor cantidad de votos como la predicción final, anulando la predicción incorrecta del clasificador individual.

Este ejemplo demuestra el poder de los métodos de conjunto, específicamente la votación por mayoría, para mejorar la precisión de la predicción. Al combinar las predicciones de múltiples clasificadores, podemos aprovechar las fortalezas de cada clasificador y minimizar el impacto de sus debilidades o errores individuales.

En conclusión, este video destaca la importancia de la votación por mayoría como una forma básica de conjuntos modelo. A través de un ejemplo de juguete, hemos visto cómo la votación por mayoría puede superar el uso de un solo clasificador, particularmente cuando los clasificadores individuales exhiben errores o variabilidad. Los métodos de conjunto, como la votación por mayoría, ofrecen un enfoque poderoso para mejorar la precisión de la predicción y se usan ampliamente en aplicaciones prácticas de aprendizaje automático.

7.2 Majority Voting (L07: Ensemble Methods)
7.2 Majority Voting (L07: Ensemble Methods)
  • 2020.10.20
  • www.youtube.com
This video discusses one of the most basic case of model ensembles, majority voting. Using a toy example (making certain assumptions), we see why majority vo...
Razón de la queja: