"Машинное обучение"

Деревья решений и случайные леса в машинном обучении

Понять два алгоритма обучения с учителем

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

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

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

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

Вот иллюстрация того, как выглядит дерево решений

Деревья принятия решений в машинном обучении:

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

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

По какому принципу делятся данные?

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

ID3 расшифровывается как Iterative Dichotomiser 3. Это алгоритм классификации, который выбирает лучший атрибут, который дает максимальное информационное усиление или минимальную энтропию.

Точно так же алгоритмы CART в основном используют индекс Джини для выбора лучшего атрибута.

Энтропия:

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

Энтропия колеблется от 0 до 1. В некоторых случаях может быть больше единицы, что означает, что данные более нечистые. Обозначается буквой «H».

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

Получение информации:

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

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

Прирост информации = Энтропия до разделения - Энтропия после разделения

Индекс Джини:

Индекс Джини в основном используется в классических алгоритмах CART. CART означает дерево классификации и регрессии, которое объясняет, как значения выходной переменной могут быть предсказаны на основе других значений.

Он работает с категориальными переменными. Результатом будет либо «Успех», либо «Неудача», поэтому выполняется только двоичное разбиение. Степень индекса Джини также колеблется от 0 до 1.

  • Если он равен 0, данные распределяются по тому же классу.
  • Если 1, то данные распределяются случайным образом.
  • 0,5 означает, что данные распределены равномерно.

В расчете очень легко вычесть сумму вероятностей из единицы.

Ниже приведен пример, иллюстрирующий деревья решений.

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

Практическое применение дерева решений с кодом Python:

#importing all the libraries needed for the process
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%inline matplotlib

Чтение csv файла с помощью pandas в ice_cream. Просмотр первых 10 значений набора данных

ice_cream=pd.read_csv("IceCreamData.csv")
ice_cream.head(10)

Использование дисплота, чтобы узнать распределение столбца доходов, присутствующего в наборе данных

sns.displot(x='Revenue',data=ice_cream,kde=True)

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

plt.scatter(x='Temperature',y='Revenue',data=ice_cream)
plt.title("Relation between Temp and rev")
plt.xlabel('Temp')
plt.ylabel('rev')
plt.show()

Температура и доход положительно коррелируют. С повышением температуры увеличивается и выручка. Таким образом, совершенно очевидно, что температура не зависит, а доход зависит от температуры. Разделение данных на X и Y, независимые и зависимые соответственно.

X=pd.DataFrame(ice_cream['Temperature'])
Y=pd.DataFrame(ice_cream['Revenue'])
#importing train_test_split method from sklearn
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.1,
                                               random_state=1)
#importing the DecisionTreeRegressor from the sklearn lib
from sklearn.tree import DecisionTreeRegressor
regressor = DecisionTreeRegressor(random_state=0)
regressor.fit(X_train, Y_train)
#output:
Training score:1.0
Testing score:0.9739054111493022
#Predicting the values
y_pred=regressor.predict(X_test)
x_pred=regressor.predict(X_train)
#Evaluating the model based on the metrics
from sklearn import metrics
print('Mean Absolute Error:', metrics.mean_absolute_error(Y_test,
                                                         y_pred))
print('Root Mean Squared Error of train dataset:',
             np.sqrt(metrics.mean_squared_error(Y_train,x_pred)))
print('Root Mean Squared Error of test dataset:', 
              np.sqrt(metrics.mean_squared_error(Y_test, y_pred)))
#output:
Mean Absolute Error: 21.89481194999999
Root Mean Squared Error of train dataset: 0.0
Root Mean Squared Error of test dataset: 27.149437063596295

Здесь средняя абсолютная ошибка составляет 21,9, то есть среднее расстояние между реальными данными и прогнозируемыми данными составляет 21,9. Значение rmse для прогнозируемых данных составляет 27,1, что означает, что фактические данные находятся на расстоянии 27,1 единиц (приблизительно) от прогнозируемых.

Параметр критерия в деревьях решений принимает индекс Джини в качестве значения по умолчанию. т.е. [критерий: {«джини», «энтропия»}, по умолчанию = «джини»].

Преимущества:

  • Дерево решений не требует нормализации и масштабирования данных.
  • Устойчив к отсутствующим значениям.

Недостатки:

  • Дерево решений часто требует больше времени для обучения данных.
  • Небольшое изменение данных вызывает большое изменение структуры дерева решений, что приводит к нестабильности.
  • Имеет тенденцию к переизбытку данных.

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



Случайные леса

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

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

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

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

Важность функции:

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

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

Практика случайного леса с кодом Python:

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

#importing all the libraries needed for the process
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%inline matplolib
#reading the csv data using pandas to salary
salary=pd.read_csv("Position_Salaries.csv")
salary

#Using the scatterplot to find the relation between level and salary
sns.scatterplot(data=salary,x='Level',y='Salary')

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

Понятно, что зарплата - это независимая переменная, а уровень - зависимая переменная.

#Now dividing the X and Y based on the variables.
X=salary.iloc[:,1].values
Y=salary.iloc[:,-1].values
#importing the train_test_split method from sklearn
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.2,
                                               random_state=0)
#reshaping the train and test dataset to minimize the value error in the further process.
X_train=np.array(X_train).reshape(-1, 1)
Y_train=np.array(Y_train).reshape(-1, 1)
X_test=np.array(X_test).reshape(-1, 1)
Y_test=np.array(Y_test).reshape(-1, 1)
#importing the Random tree regressor form the sklearn.ensemble
from sklearn.ensemble import RandomForestRegressor
rfr=RandomForestRegressor(n_estimators=100,random_state=1)
rfr.fit(X_train,Y_train.ravel())

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

print("Training dataset Score:",rfr.score(X_train,Y_train))
print("Testing dataset Score:",rfr.score(X_test,Y_test))
#output:
Training dataset Score: 0.883197840979863
Testing dataset Score: 0.9909168388429752
#Predicting the values
x_pred=rfr.predict(X_train)
y_pred=rfr.predict(X_test)

from sklearn import metrics
print('Mean Absolute Error:', metrics.mean_absolute_error(Y_test,
                                                         y_pred))
print('Root Mean Squared Error of train dataset:', 
          np.sqrt(metrics.mean_squared_error(Y_train, x_pred)))
print('Root Mean Squared Error of test:', 
           np.sqrt(metrics.mean_squared_error(Y_test, y_pred)))
#output:
Mean Absolute Error: 16250.0
Root Mean Squared Error of train dataset: 101634.8626825461
Root Mean Squared Error of test: 20967.236346261754

Здесь средняя абсолютная ошибка составляет 16250, то есть среднее расстояние между реальными данными и прогнозируемыми данными составляет 16250. Среднеквадратичное значение для прогнозируемых данных составляет 20967, что означает, что фактические данные - это то, что указанные единицы (приблизительно) удалены от прогнозируемых.

#Now predicting if he is being honest about his last salary by predicting the sal for the level 6.5
new_val= np.array(6.5).reshape(-1,1)
our_pred=rfr.predict(new_val)
our_pred
#output:
array([164100.])

Кандидат с уровнем 6.5 имел предыдущую зарплату 160000, как он указал. Здесь мы предсказали, что это будет 164100, что примерно такое же значение, поэтому мы делаем вывод, что он честно говорит о своей последней зарплате.

Преимущества:

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

Недостатки:

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


Различия между деревьями решений и случайными лесами:

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

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

Вывод:

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

Я благодарен Дханасри за помощь в написании этой статьи.

Надеюсь, статья вам понравилась. Свяжитесь со мной в моих LinkedIn и twitter.

Рекомендуемые статьи

1. NLP - от нуля до героя с Python
2. Структуры данных Python Типы данных и объекты
3. Концепции обработки исключений в Python
4. Почему LSTM более полезен, чем RNN в глубоком обучении?
5. Нейронные сети: рост рекуррентных нейронных сетей
6. Полностью объясненная линейная регрессия с помощью Python
7. Полностью объясненная логистическая регрессия с помощью Python
8. Различия между concat (), merge () и join () в Python
9. Преобразование данных в Python - часть 1
10. Матрица путаницы в машинном обучении »