Когда мы создаем модель классификатора, чтобы помочь нам классифицировать некоторую запись, нам нужно выполнить несколько шагов.
Процесс сборки модели на 85 % состоит из очистки и предварительной обработки вашего набора данных, а остальные 15 % — это кодирование модели.

Прежде всего, чтобы объяснить случайный лес, нам нужно сначала сделать несколько шагов назад и поговорить о дереве решений. Это не что иное, как говорит само название, это множество решений (мы называем это «если») в форме дерева. Но прежде чем модель создаст это дерево, переменные проходят через некоторые классы, чтобы увидеть их важность в таблице, создавая как бы ранжирование между ними. Дерево формируется от самой важной переменной к менее важной.

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

Наконец-то мы знаем всю основную концепцию случайных лесов.

Давайте кодировать…

Набор данных: Kaggle — Обнаружение мошенничества — Кредитная карта

Проверьте весь мой код здесь!

Как я всегда говорю, лучший сайт для проверки функций и методов Python:
W3Schools
Вы заметите, что все функции и методы будут подчеркнуты, это потому что я поставлю на него ссылку, чтобы вы могли увидеть больше примеров того, как его использовать. :)

Сейчас начинается часть 85%…

Те, кто читал мою другую статью здесь в среде, знают, что первое, что нам нужно сделать, это импортировать библиотеки, поэтому давайте сделаем это:

Обзор библиотек:

  • панды:манипуляции с фреймами данных
  • numpy:обработка больших многомерных массивов и матриц, а также большой набор высокоуровневых математических функций для работы с этими матрицами.
  • scikit-learn (sklearn):это библиотека машинного обучения, мы можем использовать множество моделей машинного обучения, которые находятся внутри нее, каждая из которых имеет свой особый способ импорта.
  • sklearn.preprocessing (StandardScaler): используется для повторного масштабирования всего столбца, просто чтобы вы не плавали по теме, модели ML придают большее значение большим числам, чем меньшим, потому что это понимает, что чем больше число, тем лучше, но не всегда правильно.
  • sklearn.model_selection (train_test_split): используется для разделения вашего набора данных на 4 разных набора данных, 2 из них для обучения и 2 других для тестирования вашей модели, это: x_train, y_train, x_test и y_test. (X – прогнозисты, Y – класс, который нужно прогнозировать)
  • sklearn.metrics (accuracy_score): показывает эффективность модели классификатора, чем ближе значение к 100, тем лучше.
  • sklearn.metrics (classification_report): дает точность, полноту, оценку f1, поддержку, точность, макросреднее и взвешенное среднее.
  • sklearn.metrics (plot_confusion_matrix): возвращает нам уникальные значения класса прогнозирования, а также правильные и неправильные прогнозируемые числа.

Пришло время познакомиться с вашим набором данных…

Прежде всего, мы будем использовать функцию .head()»pandas, чтобы увидеть первые 5 строк.

Мы можем заметить, что значения столбцов V в нашем наборе данных были ранее изменены в целях конфиденциальности.

Чтобы узнать размер набора данных, мы можем использовать для него свойство .shape».

Теперь проверим имеющиеся у нас столбцы с помощью свойства .columns.

Что мне нравится делать непосредственно перед проверкой столбцов, так это видеть тип данных в каждом столбце. Насколько я вижу значения в функции .head(), всегда полезно хотя бы подтвердить это с помощью .info()».

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

Как я уже сказал, мои глаза делают петли здесь rsrsrs.

Пришло время предварительной обработки наших данных!

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

Как мы это сделаем? Давайте посмотрим ниже:

Сначала мы установим объект для класса StandardScaler, который мы импортируем в начале из "sklearn.preprocessing".

Во-вторых, мы создадим еще один столбец с именем «Scaled_Amount» и поместим в него масштабированные значения.

Функция «fit_transform()» из StandardScaler, на самом деле это две функции в одной, внутри нее есть функции fit() и transform(). Метод fit() используется для получения среднего значения и стандартного отклонения от значений. Метод transform() используется для выполнения масштабирования с использованием того, что было рассчитано методом подгонки.

Функция с именем «.values» возвращает столбец в виде пустого массива.

А «.reshape()» придает новую форму массиву без изменения его данных.
В нашем случае это получение данных и изменение формы с (284807, ) на ( 284807, 1), из 1D (Dimension) в 2D-массив.

И, наконец, мы удалим столбец «Сумма».

Столбец «Время» тоже опустим, т.к. он не нужен для нашей модели.

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

Давайте выполним .head(), чтобы увидеть, как это работает.

Еще на шагах «предварительная обработка наших данных» мы разделим наш набор данных на данные для обучения и данные для тестирования.

Что это за Педро?

Сначала мы разделим Столбцы прогнозистов и Столбец класса прогнозирования. Прогнозисты — это все, что мы используем для прогнозирования, а класс прогнозирования — это только то, что мы будем прогнозировать.

Давайте посмотрим на X и Y.

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

Теперь мы используем sklearn.model_selection (train_test_split) для разделения наборов данных для обучения и тестирования.

train_test_split возвращает 4 набора данных, переменные должны быть в таком порядке, поэтому сначала у нас есть X (обучение и тестирование), а после Y (обучение и тестирование), разделенные запятой. Имя, которое вы дадите по соглашению, должно быть таким, но вы можете указать любое имя, просто запомните, какое есть какое.

random_state определяет случайность наборов данных для обучения и тестирования. Если вы укажете random_state = None, вы будете получать разные типы наборов данных при каждом запуске модели. Если вы установите random_state ≥ 0, вы всегда будете получать одни и те же наборы данных для обучения и тестирования, независимо от того, сколько раз вы запускаете модель. Я всегда ставлю 0 или больше, результаты в итоге будут более достоверными.

test_size – это соотношение наборов обучающих и тестовых данных. "0,3" означает, что 70 % приходится на обучение и 30 % на тестирование. Мы можем видеть это в форме os X и Y ниже:

Последние 15 % начинаются здесь…

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

Шаги:

Импортируйте библиотеку моделей.

Установите объект класса.

n_estimators: количество деревьев решений, которое мы будем иметь в нашей модели.
критерий: функция для измерения качества разделения.
random_state: определяет случайность данных.

Подходит для нашей модели

Мы передаем Xtrain (прогнозисты) и Ytrain (класс, который мы хотим предсказать) для нашей модели поезда и учимся на этих данных.

Прогнозировать и сохранять результаты в переменной.

В функцию предсказания мы передадим в качестве параметра нашу переменную xtest, которая является прогнозистами, а возвратом будут предсказания. (тест)

Запустите метрики, чтобы увидеть эффективность модели.

Здесь мы сравним ytest (правильные числа) с предсказанными числами (которые находятся в переменной predRFC), это вернет производительность модели.

Чтобы понять «Classification_report», нам нужно взглянуть на столбец «Отзыв и точность».
Что это за две колонки в отчете?

Давайте возьмем, например, класс прогнозирования 1.
Всегда идет от 0 до 1 (0% — 100%)

Точность. Указывает процент точности. Точность составила 0,94 (94%), что означает, что «для всех экземпляров (строк), классифицированных как 1, какой процент был правильным?»

Отзыв. Указывает процент правильной классификации. Отзыв составил 0,76 (76%). Это означает, что «для всех экземпляров (строк), которые на самом деле равны 1, какой процент был правильно классифицирован как 1?»

Оценка F1: сообщите нам баланс между точностью и процентом отзыва, это среднее значение обоих чисел, которое составляет 0,84 (84%). "Как правило, для сравнения моделей классификаторов следует использовать средневзвешенное значение F1".

Матрица путаницы — это видение точности и отзыва. У нас есть True Label (ytest) и Predict Label (predRFC). 85 289 экземпляров, которые на самом деле равны 0, были предсказаны как 0, а справа у нас есть 7 экземпляров, которые равны 0 и были предсказаны как 1.

Мы подошли к концу нашей статьи…

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

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

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

Проверьте мои социальные сети здесь:
Мое дерево ссылок

До свидания,
петебра