Feature tree что это

Feature Trees

What is it?

A Feature Tree (sometimes also known as a Feature Model or Feature Diagram) is a hierarchical diagram that visually depicts the features of a solution in groups of increasing levels of detail. In the Feature Tree, some features may be flagged as mandatory, some optional, and some as mutually exclusive. Features may be further flagged for development cycles (1st iteration, 2nd iteration, etc.), business priority, dependencies, or other relevant information.

It is important to note that there are a lot of different definitions for what a feature is, depending on where you look. [8] In general, the features in a feature tree could include functional features (hardware, software), non-functional features (performance or other criteria), or even parameters (the same feature at varying levels of capability or cost for example). [5] In most cases however, the features of Feature Tree are mostly kept at a summary level.

Feature Trees can bear significant resemblance to Functional Decomposition Diagrams, depending on the approaches taken to creating them.

Why do it?

Feature Trees are great ways to summarize the features that will be included in a solution and how they are related in a simple visual manner.

They are most commonly used for planning the overall feature set of a single solution (scope) or product that will be evolved over time (say through multiple iterations of development, or multiple releases to the marketplace) or for defining the differing features that will be included in a product line (for example, to define the differences betweenВ Windows 7 Home, Pro, and Ultimate or for different trim levels in a range of automobiles).

They can also be used to help identify missing requirements (by showing the model to clients and asking them to note missing features).

How do I do it?

Like many Business Analysis techniques, creating a Feature Tree is relatively straight forward.В It’s the analysis involved that adds complexity.

Step 1

The first step is decide what visual model you are going to use to create the Feature Tree. Seilevel seems to prefer the fishbone diagram structure (see the links below), but I prefer to use the mind-map as I find it bit more intuitive both for myself and my clients. But you can just as easily use an Organization Chart type structure if that comes easy to you. Or if you don’t have any modeling / diagramming tools at all, you can get much of the same effect with an outline structure in a word processor (although the outline really does seem to lose a lot visual intuitiveness that makes the diagram so useful).

Step 2

Name your central point (the back-bone in a fishbone diagram, the central concept in a mind map, or the top element in an org chart type structure) after the solution or product (line) that you will be building.

Step 3

From the central point, create branches for the main feature groups that your solution will have. If your solution was a shopping web site for example, you might main feature sets for Registration, Account Management, Product Search, Product Display, and Ordering.

Step 4

For each of those main branches, create sub-branches for the main features (or feature alternatives) within those areas. For example, within Account Management there might be sections for Update Shipping Address, Update Email Address, Update Email Preferences, Update Payment Information, and similar sub-groups of features related to Account Management.

Step 5

Repeat Step 4 by further breaking down each sub-branch as appropriate. In general, you don’t want to go into so much detail that you are listing actual requirements.В Seilevel generally recommends going no further than 3 levels, but it really depends on how complex your solution is. Especially for complex product lines, you go much deeper than 3 levels. Continue iterating Step 4 until you are comfortable with the results.

Step 6

Review the resulting diagram with your stakeholders. Make sure they agree that all the features are captured. If there are alternative features or those with dependencies, make sure those are captured as well. Hopefully, the Feature Tree is so easy to comprehend that you could share it with a large number of potential users in order to get feedback via email or some other method that does not require significant interaction.

What Should the Results be?

The result of your efforts should be a tree diagram that can range from relatively small to quite large. The larger and more complex, the more difficult it can be to understand.

The image below is a partial Feature Tree where just some of the Account Management features have been diagrammed. It was created in about 15 seconds using a mind-mapping application. Use whatever tool makes the most sense for your clients and yourself (be it Visio, a mind-mapping program, or whatever works for you).

Источник

Как настроить дерево решений?

Дата публикации Nov 11, 2019

Как гиперпараметры для дерева решений влияют на вашу модель и как вы выбираете, какие из них настраивать?

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

Настройка гиперпараметра

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

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

Следующим шагом после определения диапазона значений является использование метода настройки гиперпараметра. Существует множество, наиболее распространенным и дорогим из которых является Grid Search, где другие, такие как Random Search и Bayesian Optimization, обеспечат «более умную» и менее дорогую настройку. Эти методы не являются предметом настоящей статьи, но если вы хотите узнать больше, посмотрите справочный раздел [1].

Древо решений

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

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

Поскольку дерево решений в первую очередь является моделью классификации, мы рассмотрим классификатор дерева решений.

DecisionTreeClassifier

критерий: строка, необязательно (по умолчанию = «gini»):

Функция для измерения качества раскола. Поддерживаемые критерии: «Джини» для примеси Джини и «энтропия» для получения информации.

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

Согласно статье «Теоретическое сравнение между индексом Джини и критериями получения информации» [3], частота согласия / несогласия индекса Джини и получения информации составляла всего 2% от всех случаев, поэтому для всех целей и задач вы можете в значительной степени и то, и другое, но единственная разница в том, что энтропия может быть немного медленнее для вычисления, потому что она требует вычисления логарифмической функции:

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

Многие исследователи отмечают, что в большинстве случаев выбор критериев расщепления не будет иметь большого значения в производительности дерева. Каждый критерий превосходит в одних случаях и уступает в других, как предполагает теорема «Нет бесплатного обеда».

разделитель: строка, необязательно (по умолчанию = «лучший»)

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

Согласно «лучшей» и «случайной» реализации scikit-learn [4], «лучший» и «случайный» разделители используют алгоритм на основе Фишера-Йейтса для вычисления перестановки массива функций Вам не нужно беспокоиться об алгоритме, единственное отличие состоит в том, что в «лучшем» разделителе он оценивает все разбиения с использованием критерия перед разделением, тогда как «случайный» разделитель использует случайную равномерную функцию с min_feature_value, max_feature_value и random_state как входы. Мы рассмотрим, что это ниже, но сейчас давайте посмотрим, как сплиттер повлияет на модель.

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

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

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

max_depth: int или None, необязательный (по умолчанию = None)

Максимальная глубина дерева. Если None, то узлы расширяются до тех пор, пока все листья не станут чистыми или пока все листья не будут содержать меньше чем min_samples_split samples.

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

Давайте сначала поговорим о случае None по умолчанию. Если вы не укажете глубину для дерева, scikit-learn будет расширять узлы до тех пор, пока все листья не станут чистыми, то есть у листа будут только метки, если вы выберете значение по умолчанию для min_samples_leaf, где значение по умолчанию равно единице. Обратите внимание, что большинство этих гиперпараметров связаны друг с другом, и мы вскоре поговорим о min_samples_leaf. С другой стороны, если вы укажете min_samples_split, который мы рассмотрим далее, узлы будут расширяться до тех пор, пока все листья не будут содержать меньше минимального количества выборок. Scikit-learn выберет одно над другим в зависимости от того, какая из них дает максимальную глубину для вашего дерева. Здесь много движущихся частей, min_samples_split и min_samples_leaf, поэтому давайте просто возьмем max_depth изолированно и посмотрим, что происходит с вашей моделью, когда вы ее измените, поэтому после того, как мы пройдем через min_samples_split и min_samples_leaf, мы сможем лучше понять, как все это происходит все вместе.

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

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

min_samples_split: int, float, необязательный (по умолчанию = 2)

Минимальное количество выборок, необходимое для разделения внутреннего узла:

Допустим, вы указали min_samples_split, и в результате разбиения получается лист с 1 сэмплом, и вы указали min_samples_leaf как 2, тогда ваш min_samples_split не будет разрешен. Другими словами, min_samples_leaf всегда гарантируется независимо от значения min_samples_split

Согласно статье, Эмпирическое исследование по настройке гиперпараметров деревьев решений [5] идеальные значения min_samples_split имеют тенденцию быть между 1 и 40 для алгоритма CART, который является алгоритмом, реализованным в scikit-learn. min_samples_split используется для управления перегонкой. Более высокие значения не позволяют модели изучать отношения, которые могут быть очень специфичными для конкретной выборки, выбранной для дерева. Слишком высокие значения также могут привести к недостаточной подгонке, поэтому в зависимости от уровня недостаточной или чрезмерной подгонки вы можете настроить значения для min_samples_split.

min_samples_leaf: int, float, необязательный (по умолчанию = 1)

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

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

В статье «Эмпирическое исследование по настройке гиперпараметров деревьев решений» [5] также говорится, что идеальные значения min_samples_leaf имеют тенденцию находиться в диапазоне от 1 до 20 для алгоритма CART. В этой статье также указывается, что min_samples_split и min_samples_leaf являются наиболее ответственными за производительность конечных деревьев из анализа их относительной важности [5].

Согласно scikit-learn, мы можем использовать min_samples_split или min_samples_leaf, чтобы гарантировать, что несколько выборок сообщают о каждом решении в дереве, контролируя, какие разбиения будут учитываться. Они также говорят, что очень маленькое число обычно означает, что дерево будет соответствовать, тогда как большое число будет препятствовать тому, чтобы дерево изучило данные, и это должно иметь смысл. Я думаю, что единственным исключением является случай, когда у вас есть проблема с несбалансированным классом, потому что тогда регионы, в которых класс меньшинства будет составлять большинство, будут очень маленькими, поэтому вам следует выбрать более низкое значение.

min_weight_fraction_leaf: float, необязательно (по умолчанию = 0.)

Минимальная взвешенная доля общей суммы весов (всех входных выборок), необходимая для конечного узла. Образцы имеют одинаковый вес, когда sample_weight не указан.

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

max_features: int, float, string или None, необязательно (по умолчанию = None)

Количество функций, которые следует учитывать при поиске лучшего разделения:

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

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

random_state: int, экземпляр RandomState или None, необязательно (по умолчанию = None)

Ха-ха пресловутый random_state, большинство новичков спрашивают меня, почему 1, почему 0 или почему 42? 42 потому что в этом смысл жизни, дух.

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

Это подводит меня к следующему пункту: я видел, как новые студенты играют со значениями random_state и изменениями их точности, это может произойти, потому что алгоритм дерева решений основан на жадном алгоритме [6], где он повторяется несколько раз с использованием случайного На выбор объектов (сплиттер) и на этот случайный выбор влияет генератор псевдослучайных чисел [7], который принимает значение random_state в качестве начального значения, поэтому, изменяя random_state, вы можете случайным образом выбрать хорошие функции, но вам нужно Если вы понимаете, что random_state не является гиперпараметром, то изменение точности вашей модели с помощью random_state означает, что с вашей моделью что-то не так. Это хороший намек на то, что в ваших данных много локальных минимумов, и дерево решений не очень хорошо с этим справляется, поэтому я бы предпочел, чтобы вы установили random_state и настроили другие параметры, чтобы не застревать в локальных минимумах. чем поиграть с random_state.

min_impurity_decrease: float, необязательно (по умолчанию = 0.)

Узел будет разделен, если это разделение вызовет уменьшение примеси, большее или равное этому значению.

Взвешенное уравнение уменьшения примеси имеет следующий вид:

N, N_t, N_t_R и N_t_L все ссылаются на взвешенную сумму, если sample_weight пройден.

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

class_weight: dict, список диктов, «сбалансированный» или None, по умолчанию = None

Веса, связанные с классами в форме . Если не дано, все классы должны иметь вес один. Для задач с несколькими выходами список dicts может быть предоставлен в том же порядке, что и столбцы y.

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

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

presort: bool, необязательный (по умолчанию = False)

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

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

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

Резюме

Сложность дерева решений имеет решающее значение для его точности, и она явно контролируется используемыми критериями остановки и применяемым методом сокращения. Обычно сложность дерева измеряется одной из следующих метрик: общее количество узлов, общее количество листьев, глубина дерева и количество используемых атрибутов [8]. max_depth, min_samples_split и min_samples_leaf являются критериями остановки, тогда как min_weight_fraction_leaf и min_impurity_decrease являются методами сокращения.

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

Ссылка

[3] Лора Елена Райляну и Килиан Стоффель, «Теоретическое сравнение между индексом Джини и критериями получения информацииАнналы по математике и искусственному интеллекту 41: 77–93, 2004.

[5] Рафаэль Гомес Мантовани, Томаш Хорват, Рикардо Черри, Сильвио Барбон Младший, Хоакин Ваншорен, Андре Карлос Понсе де Леон Феррейра де Карвалью, «Эмпирическое исследование гиперпараметрической настройки деревьев решений»
Arxiv: 1812,02207

Источник

Делаем проект по машинному обучению на Python. Часть 3

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

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

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

Весь код проекта лежит на GitHub. А третья Jupyter Notebook, относящаяся к этой статье, лежит здесь. Можете её использовать для своих проектов!

Итак, мы работаем над решением задачи с помощью машинного обучения, точнее, с помощью управляемой регрессии (supervised regression). На основе данных об энергопотреблении зданий в Нью-Йорке мы создали модель, прогнозирующую количество баллов Energy Star Score. У нас получилась модель «регрессия на основе градиентного бустинга», способная на основе тестовых данных прогнозировать в пределах 9,1 пунктов (в диапазоне от 1 до 100).

Интерпретация модели

Регрессия на основе градиентного бустинга располагается примерно посередине шкалы интерпретируемости моделей: сама модель сложная, но состоит из сотен довольно простых деревьев решений. Есть три способа разобраться в работе нашей модели:

Важности признаков

Важности признаков позволяют увидеть связь каждого признака с целью прогнозирования. Технические подробности этого метода сложны (измеряется среднее уменьшение инородности (the mean decrease impurity) или уменьшение ошибки из-за включения признака), но мы можем использовать относительные значения, чтобы понять, какие признаки более релевантны. В Scikit-Learn можно извлечь важности признаков из любого ансамбля «учеников» на основе деревьев.

В приведённом ниже коде model — наша обученная модель, и с помощью model.feature_importances_ можно определить важности признаков. Затем мы отправим их в кадр данных Pandas и выведем на экран 10 самых важных признаков:

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

На основе этих результатов можно наконец-то ответить на один из исходных вопросов: самыми важными индикаторами количества баллов Energy Star Score являются Site EUI и Weather Normalized Site Electricity Intensity. Не будем слишком углубляться в дебри важностей признаков, скажем лишь, что с них можно начать разбираться в механизме прогнозирования моделью.

Визуализация одного дерева решений

С помощью визуализатора Graphviz преобразуем dot-файл в png, введя в командной строке:

Получили полное дерево решений:

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

Немного громоздко! Хотя это дерево глубиной всего в 6 слоёв, отследить все переходы трудно. Давайте изменим вызов функции export_graphviz и ограничим глубину дерева двумя слоями:

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

Каждый узел (прямоугольник) дерева содержит четыре строки:

(Листья содержат только 2.–4., потому что они представляют собой финальную оценку и не имеют дочерних узлов).

Формирование прогноза для заданного измерения в дереве решений начинается с верхнего узла — корня, а затем спускается вниз по дереву. В каждом узле нужно ответить на задаваемый вопрос «да» или «нет». Например, на предыдущей иллюстрации спрашивается: «Site EUI здания меньше или равно 68.95?» Если да, алгоритм переходит в правый дочерний узел, если нет, то в левый.

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

Хотя мы не сможем изучить все деревья в модели, анализ одного из них поможет разобраться в том, как прогнозирует каждый «ученик». Этот основанный на блок-схеме метод очень похож на то, как принимает решение человек. Ансамбли из деревьев решений комбинируют прогнозы многочисленных отдельных деревьев, что позволяет создавать более точные модели с меньшей вариативностью. Такие ансамбли очень точны и просты в объяснении.

Локальные интерпретируемые моделезависимые объяснения (LIME)

Последний инструмент, с помощью которого можно постараться разобраться в том, как «думает» наша модель. LIME позволяет объяснить, как сформирован одиночный прогноз любой модели машинного обучения. Для этого локально, рядом с каким-нибудь измерением на основе простой модели наподобие линейной регрессии создаётся упрощённая модель (подробности описаны в этой работе: https://arxiv.org/pdf/1602.04938.pdf).

Мы воспользуемся методом LIME, чтобы изучить совершенно ошибочный прогноз нашей модели и понять, почему она ошибается.

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

Prediction: 12.8615
Actual Value: 100.0000

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

Диаграмма объяснения прогноза:

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

Как интерпретировать диаграмму: каждая запись по оси Y обозначает одно значение переменной, а красные и зелёные полосы отражают влияние этого значения на прогноз. Например, согласно верхней записи влияние Site EUI больше 95,90, в результате из прогноза вычитается около 40 пунктов. Согласно второй записи влияние Weather Normalized Site Electricity Intensity меньше 3,80, и поэтому к прогнозу прибавляется около 10 пунктов. Итоговый прогноз представляет собой сумму интерсепта и влияний каждого из перечисленных значений.

Feature tree что это. Смотреть фото Feature tree что это. Смотреть картинку Feature tree что это. Картинка про Feature tree что это. Фото Feature tree что это

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

В данном случае модель спрогнозировала около 12 баллов, а на самом деле было 100. Поначалу вы можете недоумевать, почему так произошло, но если проанализировать объяснение, то оказывается, что это не крайне смелое предположение, а результат расчёта на основе конкретных значений. Значение Site EUI было относительно высоким и можно было ожидать низкого балла Energy Star Score (потому что на него сильно влияет EUI), что наша модель и сделала. Но в данном случае эта логика оказалась ошибочной, потому что по факту здание получило наивысший балл Energy Star Score — 100.

Ошибки модели могут вас расстраивать, но подобные объяснения помогут понять, почему модель ошиблась. Более того, благодаря объяснениям можно начать раскапывать, почему здание получило высший балл несмотря на высокое значение Site EUI. Возможно, мы узнаем что-то новое о нашей задаче, что ускользнуло бы от нашего внимания, не начни мы анализировать ошибки модели. Подобные инструменты не идеальны, но они могут сильно облегчить понимание работы модели и принимать более правильные решения.

Документирование работы и представление результатов

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

Документируя проект по анализу данных, мы упаковываем все версии данных и код, чтобы проект могли воспроизвести или собрать другие люди. Помните, что код читают чаще, чем пишут, поэтому наша работа должна быть понятна и другим людям, и нам, если мы вернёмся к ней через несколько месяцев. Поэтому вставляйте в код полезные комментарии и объясняйте свои решения. Блокноты Jupyter Notebook — прекрасный инструмент для документирования, они позволяют сначала объяснять решения, а потом показывать код.

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

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

В конечном счёте, ценность нашей работы определяется решениями, которые она помогает принять, и очень важно уметь «подать товар лицом». Правильно документируя, мы помогаем другим людям воспроизвести наши результаты и дать нам обратную связь, что позволит нам стать опытнее и в дальнейшем опираться на полученные результаты.

Выводы

В нашей серии публикаций мы разобрали от начала до конца учебный проект по машинному обучению. Начали с очистки данных, затем создали модель, и в конце научились её интерпретировать. Напомним общую структуру проекта по машинному обучению:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *