Часть 2: Методы кодирования и дендрограммы

В этом сообщении блога я расскажу о методах интерпретации оставшихся случайных лесов для улучшения прогнозов с использованием случайных лесов. Я также рекомендую читателям просмотреть мой предыдущий пост, чтобы лучше понять нижеследующий пост.

Что такое One Hot Encoding?

Давайте разберемся с этим ужасным термином на примере. Потерпите меня.
Рассмотрим набор данных, у которого есть имя столбца WeekDay (категориальная переменная), который сообщает нам день недели, то есть воскресенье, понедельник или любой другой день. Теперь в наборе данных есть и другие столбцы, но все, что имеет значение в полном наборе данных, - это воскресенье или нет, потому что предположим, что это был национальный праздник в воскресенье, который повлиял на набор данных множеством.

Теперь код для обучения модели был написан таким образом, что, если день был воскресным, приходился на n-ю группу. К тому времени, как параметр воскресенья стал иметь значение, половина набора данных уже была разделена, и, таким образом, то, что должно было иметь значение, вовсе не было критичным. Это может привести к очень неправильным и в высшей степени неприемлемым результатам для любой известной организации, которая понесет колоссальные убытки. Но есть способ решить эту проблему. Это ситуации, когда внезапное кодирование происходит неожиданно.

За кулисами
Эта функция создает количество категорий в виде отдельного столбца и удаляет родительский столбец. Он присваивает двоичные значения, то есть 0 или 1, в зависимости от того, удовлетворяет ли он ситуации, в противном случае он присваивает s 1 и 0. Давайте разберемся с этим на том же примере, что и выше. Быстрое кодирование разделит категориальную переменную WeekDay на следующие категории:
1. WeekDay_sunday
2. WeekDay_tuesday
3. WeekDay_wednesday
4. WeekDay_thursday
5. WeekDay_friday
6. WeekDay_saturday
Он уничтожит родительскую переменную WeekDay.

Теперь оценщики могут рассматривать любой столбец, и некоторым оценщикам посчастливится добраться до сути. Теперь, если вы примените разработку функций к своей модели, мы можем получить другие результаты, другой набор параметров может иметь большее значение, чем другие параметры.

Не всегда бывает так, что одно горячее кодирование улучшает результаты? Могут быть ситуации, когда это ухудшает характеристики модели, возможно, из-за проклятия размерности. По крайней мере, в этих сценариях мы будем знать о некоторых других важных функциях.

Таким образом, мы можем выполнить одно горячее кодирование достаточно быстро, и способ, которым мы это делаем, заключается в том, что мы передаем один дополнительный параметр, которому соответствует максимальное количество категорий. Итак, если мы скажем, что их семь, то все, что меньше семи уровней, будет превращено в набор столбцов с горячим кодированием. Вы можете установить этот параметр, как показано ниже.

Избыточность - это повторение, Удалите дублирование

Иногда в нашем наборе данных есть очень похожие функции, и не может быть ничего лишнего, что мы могли бы достичь, имея избыточные функции. Так что ненужные функции лучше убрать. Теперь возникает вопрос,

Как узнать о дублирующих функциях?

Кластерный анализ. Он связан с объединением похожих вещей в одну, что обычно является средним из двух. Существует метод кластеризации, который сейчас широко не используется, но очень полезен для поиска избыточных функций. Это называется иерархической кластеризацией или агломерированной кластеризацией.

В иерархической кластеризации мы проводим аналогию снизу вверх. Мы рассматриваем каждый объект и сравниваем его с любым другим объектом. Объединяем похожие объекты и продолжаем один и тот же процесс. Вместо того, чтобы сравнивать строки без меток, как это делается в k-средних, здесь мы сравниваем целые объекты или, более четко, мы полностью сравниваем две функции.

Мы можем подтвердить наше понимание, посмотрев на изображение выше.

Мы используем дендрограмму для построения иерархической кластеризации. Ниже приведен код для построения графика.

from scipy.cluster import hierarchy as hc
corr = np.round(scipy.stats.spearmanr(df_keep).correlation, 4)
corr_condensed = hc.distance.squareform(1-corr)
z = hc.linkage(corr_condensed, method='average')
fig = plt.figure(figsize=(16,10))
dendrogram = hc.dendrogram(z, labels=df_keep.columns, orientation='left', leaf_font_size=16)
plt.show()

Выше в коде перед построением дендрограммы мы вычисляем коэффициент корреляции Спирмена.

Что такое корреляция?
Корреляция похожа на R², но между двумя объектами, а не между фактическими и прогнозируемыми значениями.

Мы вычисляем ранговую корреляцию, потому что это обычно прямая линия для монотонных неубывающих функций. Это просто процедура.
Теперь, если вы запустите приведенный выше код, выйдет очень связный сюжет, подобный приведенному ниже.

Теперь вы знаете, какие функции избыточны, а какие нет. Кроме того, вы можете увидеть эффект удаления избыточных функций на вашем oob_score и сделать вывод, какие функции могут быть удалены из набора данных. Вы можете следовать следующей стратегии.

def calc_oob_score(df):
    m = RandomForestRegressor(n_estimators=30, min_samples_leaf=5, max_features=0.6, n_jobs=-1, oob_score=True)
    m.fit(independent_dataset_values, dependent_dataset_values)
    return m.oob_score_
for col in ('A', 'B', 'E', 'F'):
    print(col, get_oob(independent_dataset_values.drop(col, axis=1)))

Таким образом, мы обучили нашу модель без каких-либо избыточных переменных.

Что такое Tree Interpreter?

Это очень крутая техника, которая подскажет вам путь к вашему предсказанию. Предположим, если вы сделали прогноз, и теперь ваш клиент хочет знать причину этого прогноза, тогда вы можете показать полный подробный путь своего прогноза с помощью древовидного интерпретатора.

pip install treeinterpreter
from treeinterpreter import treeinterpreter as ti
prediction, bias, contributions = ti.predict(m, row)

Функция ti.predict принимает случайный лес и строку (на которой вы хотите исследовать результат прогноза). И это вернет мне три вещи:

  • prediction: Прогноз из случайного леса
  • bias: Среднее значение зависимой переменной по всему исходному набору данных, то есть начальное значение до любого разделения.
  • contributions: столбец и значение для разделения (т. Е. Предиктор), а также степень изменения прогнозируемого значения.

Итак, теперь вы не только уверены в своих прогнозах, но и можете указать полный путь к своему прогнозу.

Следовательно, это широко используемые методы интерпретации случайных лесов. Я предлагаю читателям узнать о них больше.