Uso de entropía de información y ganancia de información en la generación de árboles de decisión

    El árbol de decisión es un tipo de algoritmo de aprendizaje automático que genera principalmente un mecanismo de decisión similar a una estructura de árbol para un conjunto de datos determinado según los atributos relevantes.

    La estructura de árbol se puede generar de manera informal, siempre que las bifurcaciones se realicen de acuerdo con la rama del valor de la característica y se atraviesen todas las características, el árbol es un árbol de decisión. Pero para generar un árbol de decisión óptimo, debemos elegir un nodo raíz adecuado.

    Un algoritmo para seleccionar el nodo raíz es el algoritmo ID3, que selecciona características como nodo raíz en función de la ganancia de información.

     La definición de entropía de la información: Shannon propuso el concepto de entropía, que significa la medida de la incertidumbre de variables aleatorias.

     Según la descripción, la incertidumbre aquí en realidad implica el problema de la probabilidad, y la fórmula de cálculo de la entropía se utiliza para calcular esta suma de probabilidad. Supongamos que X es una variable aleatoria discreta con valores finitos y su distribución de probabilidad es:

P(X=x_{i}) = p_{i}, i = 1,2,3,...,n

, entonces la entropía de una variable aleatoria X se define como:

Ent(X) = -\sum_{i=1}^{n}p_{i} log_{2}p_{i}

    Esta fórmula parece un poco extraña. Cuando calculamos la entropía de la información, debería ser una suma de probabilidad, que en última instancia es un número mayor que 0. ¿Por qué hay un signo menos en esta fórmula? De hecho, sabemos que la probabilidad aquí es un número entre 0-1. El máximo no excede 1, y la función logarítmica está en el rango de 0-1, el resultado es un número negativo, como se muestra a continuación:

    Por lo tanto, el signo menos aquí simplemente convierte un número negativo en un número positivo y el resultado final es mayor que 0 y no un número negativo.

    El resultado de la entropía sólo puede explicar la incertidumbre de la información. Cuanto mayor es la entropía, mayor es la incertidumbre de la información y más dispersa es la distribución de la muestra; cuanto menor es la entropía, menor es la incertidumbre y más concentradas son las muestras.

     Por ejemplo, echemos un vistazo a la entropía correspondiente a la distribución de muestra a través del siguiente ejemplo.

    En la figura anterior, asumimos

    1. Todas las muestras son del mismo color, por lo que el resultado final del cálculo de entropía es 0. 

    2. Si se mezcla un color rojo en la muestra, el resultado final del cálculo es 0,811.

    3. El rojo y el azul son iguales en la muestra y su probabilidad es del 50%, por lo que el resultado de la entropía es 1.

    El resultado de la entropía está relacionado con los resultados de la muestra, no con los valores propios.

    Definición de ganancia de información: literalmente hablando, es una diferencia, la diferencia de ganancia de información, y esta diferencia de ganancia de información debe vincularse a características y valores propios, aquí se genera un peso y los valores propios corresponden a muestras que representan el Proporción general de la muestra. Es otro nivel de probabilidad.

     La definición es la siguiente: Supongamos que la característica a tiene los siguientes valores posibles, es decir, ramas: {  un^{1},un^{2},...,un^{v}}, si a se usa para la división, se generarán v ramas. Entre ellos, la v-ésima rama incluye un^{v}las muestras cuyos valores están en la muestra X, denotada como X^{v}, podemos calcular X^{v}la entropía de acuerdo con la definición de entropía de información anterior Ent(X^{v}). Teniendo en cuenta que hay v ramas con diferentes tamaños de muestra, suponiendo el peso de cada rama \frac{\izquierda |  X^{v} \derecha |}{\izquierda |  X\derecha |}, de ser así, se puede calcular la ganancia de información al usar la característica a para dividir el conjunto de datos X:

Ganancia(X,a) = Ent(X) - \sum_{v=1}^{V}\frac{\left |  X^{v} \derecha |}{\izquierda |  X \right |}Ent(X^{v})

    El significado de ganancia de información es utilizar la característica a para dividir el tamaño de la mejora de la pureza de toda la muestra. Cuanto mayor sea la mejora, mejor será la característica, por lo que al construir un árbol de decisión, le damos prioridad a esta característica. Después de seleccionar la función actual, debemos eliminar la función y continuar usando las funciones restantes para hacer nuevas divisiones hasta que se completen todas las divisiones de funciones.

    Veamos cómo elegir un buen nodo raíz según un ejemplo específico.

     Como se muestra a continuación, es un ejemplo de un banco que decide si otorga un préstamo en función de la edad, el trabajo, la propiedad y el estado del préstamo del objeto del préstamo:

    La primera tabla es la situación de muestra y la segunda tabla son las estadísticas de muestra basadas en la primera tabla.

    Luego utilizamos la entropía de información y la ganancia de información anteriores para calcular los datos relevantes.

    Entropía de información general, esto solo debe calcularse mediante la probabilidad de sí y no en la muestra.

    Ent(X) =  -\frac{6}{15}log_{2}\frac{6}{15} - \frac{9}{15}log_{2}\frac{9}{15} = 0,971

    Ganancia de información:

     Ganancia(X, edad) = Ent(X) - \sum_{v=1}^{V}\frac{\left |  X^{1} \derecha |}{\izquierda |  X \right |}Ent(X^{1}) = \\ \\ 0.971 - \frac{5}{15}(-\frac{2}{5}log_{2}\frac{2}{5} -\frac{3}{5}log_{2}\frac{3}{5}) - \\ \\ \frac{5}{15}(-\frac{3}{5}log_{2}\ frac{3}{5}-\frac{2}{5}log_{2}\frac{2}{5}) - \\ \\ \frac{5}{15}(-\frac{4}{ 5}log_{2}\frac{4}{5}-\frac{1}{5}log_{2}\frac{1}{5}) = 0,083

     Ganancia(X, trabajo) = Ent(X) - \sum_{v=1}^{V}\frac{\left |  X^{2} \derecha |}{\izquierda |  X \right |}Ent(X^{2}) = \\ \\ 0.971 - \frac{5}{15}(-\frac{5}{5}log_{2}\frac{5}{5} -\frac{0}{5}log_{2}\frac{0}{5}) - \\ \\ \frac{10}{15}(-\frac{4}{10}log_{2}\ frac{4}{10}-\frac{6}{10}log_{2}\frac{6}{10}) = 0,324

     Ganancia(X, propiedad) = Ent(X) - \sum_{v=1}^{V}\frac{\left |  X^{3} \derecha |}{\izquierda |  X \right |}Ent(X^{3}) = \\ \\ 0.971 - \frac{6}{15}(-\frac{6}{6}log_{2}\frac{6}{6} -\frac{0}{6}log_{2}\frac{0}{6}) - \\ \\ \frac{9}{15}(-\frac{3}{9}log_{2}\ frac{3}{9}-\frac{6}{9}log_{2}\frac{6}{9}) = 0,420

     Ganancia(X, estado del préstamo) = Ent(X) - \sum_{v=1}^{V}\frac{\left |  X^{4} \derecha |}{\izquierda |  X \right |}Ent(X^{4}) = \\ \\ 0.971 - \frac{5}{15}(-\frac{1}{5}log_{2}\frac{1}{5} -\frac{4}{5}log_{2}\frac{4}{5}) - \\ \\ \frac{6}{15}(-\frac{4}{6}log_{2}\ frac{4}{6}-\frac{2}{6}log_{2}\frac{2}{6}) - \\ \\ \frac{4}{15}(-\frac{4}{ 4}log_{2}\frac{4}{4}-\frac{0}{4}log_{2}\frac{0}{4}) = 0,363

    El proceso de cálculo anterior se demuestra mediante el código de la siguiente manera:

from math import log2


def create_datasets():
    datasets = [[0, 0, 0, 0, 'no'],
                [0, 0, 0, 1, 'no'],
                [0, 1, 0, 1, 'yes'],
                [0, 1, 1, 0, 'yes'],
                [0, 0, 0, 0, 'no'],
                [1, 0, 0, 0, 'no'],
                [1, 0, 0, 1, 'no'],
                [1, 1, 1, 1, 'yes'],
                [1, 0, 1, 2, 'yes'],
                [1, 0, 1, 2, 'yes'],
                [2, 0, 1, 2, 'yes'],
                [2, 0, 1, 1, 'yes'],
                [2, 1, 0, 1, 'yes'],
                [2, 1, 0, 2, 'yes'],
                [2, 0, 0, 0, 'no']]
    labels = ['F-Age', 'F-Work', 'F-House', 'F-Loan', 'Target']
    return datasets, labels


def calc_shannon_entropy(datasets):
    data_len = len(datasets)
    label_count = {}
    for i in range(data_len):
        label = datasets[i][-1]
        if label not in label_count:
            label_count[label] = 0
        label_count[label] += 1
    entropy = -sum([(p / data_len) * log2(p / data_len) for p in label_count.values()])
    return entropy


def cal_condition_entropy(datasets, axis=0):
    data_len = len(datasets)
    feature_sets = {}
    for i in range(data_len):
        feature = datasets[i][axis]
        if feature not in feature_sets:
            feature_sets[feature] = []
        feature_sets[feature].append(datasets[i])
    condition_entropy = sum([(len(p) / data_len) * calc_shannon_entropy(p) for p in feature_sets.values()])
    return condition_entropy


def info_gain(entropy, condition_entropy):
    return entropy - condition_entropy


def info_gain_train(datasets, labels):
    count = len(datasets[0]) - 1
    entropy = calc_shannon_entropy(datasets)
    best_feature = []
    for i in range(count):
        info_gain_i = info_gain(entropy, cal_condition_entropy(datasets, axis=i))
        best_feature.append((i, info_gain_i))
        print('feature : {},info_gain : {:.3f}'.format(labels[i], info_gain_i))
    best_ = max(best_feature, key=lambda x: x[-1])
    return labels[best_[0]]


if __name__ == '__main__':
    datasets, labels = create_datasets()
    ent = calc_shannon_entropy(datasets)
    print('entropy : {}'.format(ent))
    feature = info_gain_train(datasets, labels)
    print('best feature : {}'.format(feature))

    运行结果:
entropía: 0.9709505944546686
característica: F-Age,info_gain: 0.083
característica: F-Work,info_gain: 0.324
característica: F-House,info_gain: 0.420
característica: F-Loan,info_gain: 0.363
mejor característica: F-House 

   En el proceso de generación del árbol de decisión, la parte anterior es solo el comienzo: se encuentra el nodo raíz más adecuado y luego es necesario continuar resolviendo recursivamente nuevos nodos adecuados en función de otras características.

Supongo que te gusta

Origin blog.csdn.net/feinifi/article/details/131766471
Recomendado
Clasificación