Модель_случайного_леса_python

Введение в алгоритм случайного леса на Python

Алгоритм случайного леса стал наиболее распространенным алгоритмом, который используется в соревнованиях ML, таких как соревнования Kaggle. Если вы когда-нибудь будете искать простой в использовании и точный алгоритм ML, вы получите абсолютно случайный лес в верхних результатах. Чтобы понять алгоритм случайного леса, вы должны сначала познакомиться с деревьями решений.

Что такое деревья решений?

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

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

Что такое случайный лес?

Как определил Лео Брейман в своей исследовательской статье: «Случайные леса — это комбинация предикторов деревьев, такая, что каждое дерево зависит от значений случайного вектора, отбираемого независимо и с одинаковым распределением для всех деревьев. В лесу «

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

Преимущества случайных лесов

  • Его можно использовать как для задач классификации, так и для задач регрессии.
  • Уменьшение переобучения: усреднение нескольких деревьев значительно снижает риск переобучения.
  • Случайные леса делают неверный прогноз только тогда, когда более половины базовых классификаторов неверны.
  • Очень легко измерить относительную важность каждой функции для прогноза. В Sklearn в качестве примера есть мощная библиотека для этого.
Читайте также:  Лама_торф_хвойный_лес

Из-за этого он более точен, чем большинство других алгоритмов.

Недостатки случайных лесов

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

Важная терминология, относящаяся к деревьям решений [1]

Давайте посмотрим на основную терминологию, используемую с деревьями решений и случайными лесами:

  1. Корневой узел: он представляет всю генеральную совокупность или выборку, которая далее делится на два или более однородных набора.
  2. Разделение: это процесс разделения узла на два или более подузлов.
  3. Узел принятия решения: когда подузел разделяется на дополнительные подузлы, он называется узлом принятия решения.
  4. Конечный / конечный узел: узлы не разделяются, это называется конечным или конечным узлом.
  5. Удаление: когда мы удаляем подузлы узла принятия решения, этот процесс называется сокращением. Можно сказать обратный процесс расщепления.
  6. Ветвь / поддерево. Подраздел всего дерева называется ветвью или поддеревом.
  7. Родительский и дочерний узлы: узел, который разделен на подузлы, называется родительским узлом подузлов, а подузлы являются дочерними по отношению к родительскому узлу.

После того, как мы познакомимся с некоторыми основами о случайных лесах, давайте использовать этот алгоритм в некотором наборе данных. В нашем случае мы будем использовать набор данных Kaggle’s titanic Survivors, который я предварительно обработал ранее.

А затем мы будем использовать нейронную сеть для сравнения результатов.

Я рекомендую вам попробовать запустить код самостоятельно в этом [Блокноте Colab]

Импортируйте необходимые зависимости:

from sklearn.model_selection import train_test_split import pandas as pd import numpy as np from keras.models import Sequential from keras.layers import Dense, Activation, Flatten from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import f1_score from sklearn.metrics import accuracy_score from keras.callbacks import ModelCheckpoint from sklearn.metrics import accuracy_score

Загрузите предварительно обработанный набор данных:

Загрузите предварительно обработанный набор данных [Здесь]

dataset =pd.read_csv('TitanicPreprocessed.csv') dataset.head()

y = dataset['Survived'] X = dataset.drop(['Survived'], axis = 1) # Split the dataset to trainand test data train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.25, random_state=0)

Задайте параметры для модели случайного леса:

Гиперпараметры классификатора случайного леса Sklearn [2]:

bootstrap: логический, необязательный (по умолчанию = True)

Читайте также:  Карты_лесов_воскресенского_района

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

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

  • Если int, то считайте min_samples_leaf минимальным числом.
  • Если float, то min_samples_leaf — это процент, а ceil (min_samples_leaf * n_samples) — минимальное количество выборок для каждого узла.

n_estimators: целое число, необязательно (по умолчанию = 10)

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

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

  • Если int, то считайте min_samples_split минимальным числом.
  • Если float, то min_samples_split — это процент, а ceil (min_samples_split * n_samples) — минимальное количество выборок для каждого разделения.

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

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

  • Если int, то учитывайте особенности max_features при каждом разбиении. -Если число с плавающей точкой, max_features — это процентное значение, а функции int (max_features * n_features) учитываются при каждом разбиении.
  • Если «авто», то max_features = sqrt (n_features).
  • Если «sqrt», то max_features = sqrt (n_features) (то же, что «auto»).
  • Если «log2», то max_features = log2 (n_features).
  • Если нет, то max_features = n_features.

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

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

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

  • Выращивайте деревья с max_leaf_nodes способом «лучший первый». Лучшие узлы определяются как относительное уменьшение примесей. Если None, то неограниченное количество конечных узлов.

Если вы хотите узнать больше об остальных гиперпараметрах, посетите sklearn.ensemble.RandomForestClassifier

Определите модель:

RF_model = RandomForestClassifier(**parameters)

Обучите модель:

RF_model.fit(train_X, train_y)

Протестируйте обученную модель на тестовых данных:

RF_predictions = RF_model.predict(test_X) score = accuracy_score(test_y ,RF_predictions) print(score)

Мы видим, что точность модели 82%, совсем неплохо.

Использование нейронных сетей:

Определите модель:

# Build a neural network : NN_model = Sequential() NN_model.add(Dense(128, input_dim = 68, activation='relu')) NN_model.add(Dense(256, activation='relu')) NN_model.add(Dense(256, activation='relu')) NN_model.add(Dense(256, activation='relu')) NN_model.add(Dense(1, activation='sigmoid')) NN_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

Определите обратный вызов контрольной точки:

checkpoint_name = 'Weights--.hdf5' checkpoint = ModelCheckpoint(checkpoint_name, monitor='val_acc', verbose = 1, save_best_only = True, mode ='max') callbacks_list = [checkpoint]

Обучите модель:

NN_model.fit(train_X, train_y, epochs=150, batch_size=64, validation_split = 0.2, callbacks=callbacks_list)

Epoch 00044: val_acc did not improve from 0.88060 Epoch 45/150 534/534 [==============================] — 0s 149us/step — loss: 0.3196 — acc: 0.8652 — val_loss: 0.4231 — val_acc: 0.8433 Epoch 00045: val_acc did not improve from 0.88060 Epoch 46/150 534/534 [==============================] — 0s 134us/step — loss: 0.3156 — acc: 0.8670 — val_loss: 0.4175 — val_acc: 0.8358 Epoch 00046: val_acc did not improve from 0.88060 Epoch 47/150 534/534 [==============================] — 0s 144us/step — loss: 0.3031 — acc: 0.8689 — val_loss: 0.4214 — val_acc: 0.8433 Epoch 00047: val_acc did not improve from 0.88060 Epoch 48/150 534/534 [==============================] — 0s 131us/step — loss: 0.3117 — acc: 0.8689 — val_loss: 0.4095 — val_acc: 0.8582 . . . Epoch 00148: val_acc did not improve from 0.88060 Epoch 149/150 534/534 [==============================] — 0s 146us/step — loss: 0.1599 — acc: 0.9382 — val_loss: 1.0482 — val_acc: 0.7761 Epoch 00149: val_acc did not improve from 0.88060 Epoch 150/150 534/534 [==============================] — 0s 133us/step — loss: 0.1612 — acc: 0.9307 — val_loss: 1.1589 — val_acc: 0.7836 Epoch 00150: val_acc did not improve from 0.88060

Читайте также:  Гост_морсы_ягодные_действующий

Загрузите файл wights лучшей модели:

wights_file = './Weights-016-0.88060.hdf5' # choose the best checkpoint NN_model.load_weights(wights_file) # load it NN_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

Протестируйте обученную модель на тестовых данных:

predictions = NN_model.predict(test_X) # round predictions rounded = [round(x[0]) for x in predictions] predictions = rounded score = accuracy_score(test_y ,predictions) print(score)

Точность этой модели нейронной сети составляет 81%, мы замечаем, что использование случайного леса дает нам более высокую точность.

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

Использованная литература :

Вы можете подписаться на меня в Twitter @ModMaamari

Вам также может понравиться:

Источник

Оцените статью