Мне так приятно видеть, что вы достигли стадии, когда теперь вы прогнозируете точность своих моделей с помощью алгоритмов, сегодня я хотел бы поделиться одним из моих любимых алгоритмов - Random forrest Classifier (или RFC).

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

Что это?

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

Чтобы начать работу с RFC, вам нужно немного узнать о деревьях решений. Дерево решений выглядит так (ниже) -

Деревья решений начинаются с вопроса, следующий шаг - это простая классификация по принципу «да» или «нет», шаг 2 также является простой классификацией «да» или «нет», и вуаля у вас есть дерево, полное вариантов. Понимаете

  1. Есть у меня 25 долларов

1.1 Сходить в ресторан

1.2 Купить гамбургер

2. Засыпать.

1.1, 1.2 и 2 все называются листовыми узлами или решениями, пока просто придерживайтесь этой концепции, и я объясню вам ее значение позже.

Почему мы используем RFC?

Алгоритм RFC помогает нам понять, какие размеры или функции выбрать или создать модель, поскольку он помогает в доработке или сужении функций.

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

Примечание: вы должны учитывать, что данные о раке груди, с которыми я имел дело, имели всего несколько сотен точек данных, если ваш набор данных большой, скажем, 200 столбцов и более тысяч точек данных - RFC медленный и, вероятно, не самый лучший. способ сделать это.

Как мы применяем RFC?

позвольте мне разбить это на 1,2,3 для вас -

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

из sklearn.datasets импортировать load_breast_cancer

d1 = load_breast_cancer ()

Это не единственный способ загрузки данных, вы также можете -

импортировать панд как pd

d1 = pd.read_csv («путь к файлу на локальном диске»)

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

Что такое регрессия и классификация?

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

  • Регресс
  • Классификация

Регрессия - это, по сути, поиск правильной функции, которая подходит для всех входных данных и способна предсказать результат. Что-то вроде ниже - где функция может выровнять все точки, скажем, эта функция - f (x), где x - вход,

Регрессия помогает нам найти функцию, а затем сказать, что у нас есть новые входные точки, которых нет на этом графике, мы используем f (x), чтобы найти их выходные данные. f (x) может быть дифференциальной функцией, тригонометрической функцией, пользовательской функцией или даже простой y = mx + c (линейной функцией).

Классификация - это создание наборов или категорий входных данных на основе функции или правила, представьте данные как {«Помидор», «Яблоко», «Банан», «Картофель»} в качестве входных данных (x). потом

X1 = фрукты - это категория, и в ней должны быть {‘Apple’, ‘Banana’}.

X2 = овощи - категория, содержащая {‘Tomato’, ‘Potato’}

и если новый ввод, скажем, {‘Cucumber’} добавлен в набор данных, с помощью классификации мы можем поместить его в X2.

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

В случае регресса

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

Позвольте мне объяснить это с помощью кода ›

print (d1.feature_names)

›› ['средний радиус' 'средняя текстура' 'средний периметр' 'средняя площадь'
'средняя гладкость' 'средняя компактность' 'средняя вогнутость'
'средние точки вогнутости' 'означает симметрию '' средняя фрактальная размерность '
' ошибка радиуса 'ошибка текстуры' 'ошибка периметра' 'ошибка области'
'ошибка гладкости' ошибка компактности 'ошибка вогнутости'
'ошибка вогнутых точек '' ошибка симметрии '' ошибка фрактальной размерности '
' худший радиус '' худшая текстура '' худший периметр '' худшая область '
' худшая гладкость '' худшая компактность '' худшая вогнутость '
'худшие вогнутые точки' худшая симметрия 'худшее фрактальное измерение']

Имеется 29 столбцов с сотнями данных, мы в основном выбираем случайные выборки из всех столбцов и составляем сотни деревьев решений и имеем сотни * N (нет решений) листов, из которых мы находим значение рекомендации из столбца.

скажем, листы столбца 1 - это {1,2}, {3,4}, {1,3}, {3,2}… .. тогда среднее из всех, скажем, 2,7 берется как рекомендация для столбца 1, аналогично, у нас есть 28 другие рекомендации, прежде чем мы проведем голосование. (подробнее о голосовании позже).

В случае классификации

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

Уф, это было сложно понять, перечитайте это и попытайтесь найти в нем смысл. Если вы запутались, прочтите это, чтобы получить больше ясности ›



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

29 рекомендаций - ›RFC Algo -› Голосование по наиболее благоприятным данным.

Давайте посмотрим, как это сделать в python, правило большого пальца - 70% данных обучения, 30% данных тестирования.

Реализация алгоритма RFC с использованием кода

from sklearn.model_selection import train_test_split

# разделить данные обучения и тестирования

из sklearn.ensemble импортировать RandomForestClassifier

# библиотека для импорта алгоритма RFC

X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0,3)

# разделение данных на соотношение 70:30, т. е. 70 для обучения и 30 для тестирования

clf = RandomForestClassifier (n_estimators = 100)

# создание 100 деревьев решений на основе наших данных d1

clf.fit (X_train, y_train)

# обучение нашей машины путем предоставления x входных данных и предоставления ответов / целей в виде y_train

y_pred = clf.predict (X_test)

# вычисление вывода данных, не переданных машине, в качестве обучающих данных, чтобы проверить, работает ли наша модель

print («Точность:», metrics.accuracy_score (y_test, y_pred))

›› Моя точность составила 94% [помните, что это будет осторожно, на основе случайных выборок, собранных с машины. ]

Что мы узнали?

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

Если вы хотите запустить код на своем ноутбуке, вот ссылка на него на github.

Https://github.com/rmadan16/RandomForrestClassifier

Однако обучение на этом не закончилось.

Если вы хотите повысить точность своего прогноза, есть еще один шаг.

Дальнейший шаг

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

Что такое показатель точности?

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

У каждого столбца есть оценка релевантности, которую можно узнать -

feature_imp = pd.Series (clf.feature_importances_, index = d1.feature_names) .sort_values ​​(ascending = False)

Сумма всех оценок точности или релевантности равна 1.

›› средний радиус 0,164371 т. е. 16,4%
средний периметр 0,150038 т. е. 15%
худший радиус 0,094000….
худшая область 0,079068
средняя фрактальная размерность 0,067840
худшая периметр 0,060207
средняя гладкость 0,053101
средняя площадь 0,052318
средняя симметрия 0,037666
средние вогнутые точки 0,029321
худшая фрактальная размерность 0,024776
худшие точки вогнутости 0,021425
ошибка симметрии 0,019996
худшая гладкость 0,018007
средняя вогнутость 0,015951
худшая вогнутость 0,015148
худшая симметрия 0,012145
средняя текстура 0,010561
худшая текстура 0,009160
худшая компактность 0,008927
погрешность текстуры 0,007539
погрешность периметра 0,006698
погрешность площади 0,006677
погрешность точек вогнутости 0,006199
погрешность радиуса 0,006158
погрешность вогнутости 0,006010
ошибка компактности 0,005264
ошибка гладкости 0,004375
средняя компактность 0,004162
ошибка фрактальной размерности 0,002891

Как видите, все фрактальное измерение, средняя компактность на ‹0% влияют на наш алгоритм, что означает, что мы можем уменьшить эти измерения или не использовать их.

Это также означает, что RFC дал нам все важные измерения, на которых нужно сосредоточиться, а именно: ›1% или 2%, то есть выше Худшей текстуры.

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

После удаления ненужных параметров моя оценка точности составила 97,4%.

Надеюсь, вы смогли извлечь уроки из этого руководства, поставить лайк и поделиться с друзьями на medium или github :)

Да прибудет с тобой сила.