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

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

Цель

Общий органический углерод (TOC) является важным параметром при оценке и разведке резервуаров, а также при характеристике нефтематеринских пород. Увеличение TOC указывает на присутствие и расширение материнской породы, в то время как снижение TOC можно интерпретировать как отсутствие источника углеводородов. TOC также определяет геофизическую характеристику ресурсов сланцевого газа, которая влияет на реакцию горных пород на органической основе. Пиролиз для оценки горных пород является традиционным подходом к определению углеводородного потенциала коллекторов. Традиционная интерпретация гамма-каротажа, акустического каротажа и каротажа удельного сопротивления использовалась в прошлом для определения уровня TOC в коллекторах. Эти методы позволяют оценить приемлемый уровень общего содержания органического углерода в пласте, но обычно требуют больших затрат времени и средств. Поэтому многие инженеры пытались использовать подходы ИИ для прогнозирования ТОС по данным каротажа.

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

Вы также можете получить доступ к моей записной книжке Python в моем репозитории Github, в котором этот рабочий процесс выполняется от начала до конца.

Импорт данных и визуализации

начать импорт основных библиотек, импорт файла данных и создание фрейма данных

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

Исследовательский анализ данных

Исследовательский анализ данных (EDA) имеет решающее значение для понимания наших данных. Две важные вещи, которые мы хотим знать, — это распределение каждого отдельного признака и корреляция одного признака с другим. Ниже приведено многомерное распределение функций и цели.

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

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

Подготовка модели

Алгоритмы на основе дерева, такие как дерево решений, случайный лес и т. д., не требуют нормализации или стандартизации признаков. Например, при применении дерева решений, поскольку дерево разветвляется вниз, нормализация или стандартизация не помогут. Давайте определим x и y (ввод-вывод). Затем импортируйте библиотеку train_test_split и используйте 70/30, а также импортируйте «DecisionTreeRegressor» из sklearn.tree.

Настройка параметров

Теперь нам нужно определить параметры, которые используются в дереве решений. Начнем с «Критерия», который используется для измерения качества разделения. Параметры, предоставляемые в scikit-learn при использовании «DecisionTreeRegressor», — это «mse», что означает среднеквадратичную ошибку, однако это один из гиперпараметров, которые можно использовать при применении поиска по сетке. Следующий параметр называется «max_depth» и, согласно scikit-learn, он определяется как «максимальная глубина дерева», а значение по умолчанию — «Нет», что означает «расширение узлов», пока все листья не станут чистыми или пока все листья содержат меньше сэмплов, чем «min_samples_split». чем глубже дерево и тем больше разбиений будет связано с этим деревом. Больше разбиений означает захват большего количества информации. Следовательно, большая глубина приводит к переоснащению. Третий параметр называется «min_sample _split» и определяется как «Минимальное количество выборок, необходимое для разделения внутреннего узла». Обратитесь к рис. 5.38, чтобы отметить, что внутренний узел — это то же самое, что и узел принятия решений, и он может иметь дочерние узлы и ответвляться на другие узлы. чем выше «min_sample_split», тем большим ограничением становится дерево, поскольку оно должно учитывать больше выборок в каждом узле. Значение по умолчанию в scikit-learn равно 2. «min_sample_leaf» — это еще один параметр, используемый для управления переоснащением, и, согласно scikit-learn, этот параметр определяется как «минимальное количество выборок, необходимое для конечного узла». Ключевое различие между «min_sample_split» и «min_sample_leaf» заключается в том, что первый фокусируется на внутреннем узле или узле принятия решений, а второй — на листовом или конечном узле. Высокое значение «min_sample_leaf» также приведет к серьезному недообучению, а низкое значение приведет к переоснащению. Следующая метрика называется «max_features» и определяется как «количество функций, которые следует учитывать при поиске наилучшего разделения». Некоторые из доступных опций — «авто», «sqrt», «log2», а по умолчанию — «Нет», что устанавливает «max_features» для ряда функций. Последний параметр называется «ccp_alpha», который используется для обрезки. По умолчанию обрезка не выбрана.

После того, как параметры установлены, пришло время применить «dtree» к «(X_train, y_train)» для входных и выходных данных обучения. Давайте применим для прогнозирования «X_train» и «X_test» следующим образом. Основная причина обращения к «X_train» — возможность получить точность обучения на модели, а также точность тестирования.

Далее, давайте получим обучение и тестирование R².

Как показано, обучение R2 составляет 97,58%. Однако тестирование R2 составляет всего 69,38%.

Далее, давайте визуализируем фактическое обучение по сравнению с прогнозом и тестирование фактического по сравнению с прогнозом.

Чтобы правильно оценить модель со всех сторон, давайте также добавим MAE, MSE и RMSE.

MAE: 0,00127

MSE: 1e-05

RMSE: 0,00282

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

толщина и эффективная пористость являются двумя наиболее важными характеристиками, влияющими на результаты модели, которая была определена как TOC.

Train_test_split выполнялся случайным образом, при этом 70 % данных использовались для обучения, а 30 % — для тестирования. Давайте также проведем пятикратную перекрестную проверку, чтобы увидеть полученное среднее значение R2.

Оценки перекрестной проверки R2: [0,66616785 0,56835982 0,5223478 0,62668483 0,77734923]

Средний балл перекрестной проверки R2: 0,6321819058443482