Мои заметки по чтению «Практика машинного обучения» (2)

машинное обучение искусственный интеллект Python алгоритм

При классификации данных, как определить, какой результат лучше между результатом классификации алгоритма A и результатом классификации алгоритма B?
Можно использовать «энтропию Шеннона». Его формула выглядит следующим образом:

图1.png
Рисунок 1.png

Чем больше рассчитанное значение H, тем менее точна классификация. Реализация на Python выглядит следующим образом:

from math import log

# 结果数值越大,说明数据集约杂乱(有其他分类混进来)
def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}
    # 创建一个字典,记录各个类型的出现的次数,dataset的最后一列是类型
    for featVec in dataSet:
        currentLabel = featVec[-1]
        if currentLabel not in labelCounts.keys():labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    # 熵,越大代表混合的数据越多
    shannonEnt = 0.0
    for key in labelCounts:
        # 每种类型的占总数的比例
        prob = float(labelCounts[key]) / numEntries
        # 公式
        shannonEnt -= prob * log(prob, 2)
    return shannonEnt

Где featVec[-1] должен взять последнее значение. Предположим, мы используем какой-то алгоритм для классификации следующих пяти частей данных в одну категорию, очевидно, что «да» и «нет» смешаны вместе, но мы также должны «оценить» эту классификацию, а именно энтропию Шеннона. Обратите внимание, что последний столбец набора данных представляет тип данных.

图2.png
Рисунок 2.png

Формула расчета энтропии Шеннона не имеет ничего общего с «0» и «1» в первых двух столбцах набора данных. Простой расчет: «да» составляет 40%, «нет» — 60%, что в формуле равно p(xi). Затем выполните вычисление log2 и сложите их отрицательные значения вместе.
Результат расчета данных приведенного выше рисунка: 0,9709505944546686.
Если данные:
图3.png
Рисунок 3.png

Результат расчета: 0,7219280948873623
Чем меньше значение, тем лучше результат классификации.
Если данные:
图4.png
Рисунок 4.png

Результат расчета: 1,5219280948873621.
Чем больше значение, тем неточнее классификация, то есть используемый алгоритм классификации не эффективен.
Конечно, самые совершенные данные:
图5.png
Рисунок 5.png

Результат расчета периода должен быть меньше всех предыдущих результатов, это: 0.0