"Машинное обучение"
Деревья решений и случайные леса в машинном обучении
Понять два алгоритма обучения с учителем
Как мы все знаем, машинное обучение - это подмножество искусственного интеллекта, которое позволяет пользователю обучать модель и прогнозировать данные для бизнес-потребления. Мы обучаем машину с помощью обучающего набора данных; данные не всегда должны быть помечены как один, то есть не с указанными характеристиками. Это когда на сцену выходит неконтролируемая модель машинного обучения. Они работают с немаркированными данными. В то время как контролируемый работает с помеченными данными, неконтролируемый работает с немаркированными данными.
Теперь у нас есть приблизительное представление о том, что такое машинное обучение и его типы. Теперь, идя дальше в этой статье, давайте попробуем понять два алгоритма обучения с учителем, деревья решений, случайные леса и точки, в которых они отличаются друг от друга.
Дерево решений
Как следует из названия, это древовидная структура, которая используется для принятия решений, которые в основном используются в условных операторах управления.
Вот иллюстрация того, как выглядит дерево решений
Деревья принятия решений в машинном обучении:
Дерево решений - это управляемая модель машинного обучения, которая используется как для классификации, так и для регрессии. Данные здесь непрерывно переливаются в соответствии с определенным правилом или параметром. Каждая ветвь представляет собой результат теста, а каждый листовой узел содержит метку. Разделение данных начинается с корневого узла и заканчивается на листовом узле. Таким образом, они всегда следуют подходу сверху вниз. Прежде чем идти дальше, давайте выучим несколько новых терминов.
- Корневой узел: представляет все население. Это первый узел.
- Разделение: процесс разделения выборки на основе параметра.
- Узел принятия решения. Узел разделяется на дополнительные подузлы.
- Конечный узел: последний этап узла или выходной метки.
- Обрезка: противоположна расщеплению, выполняется для уменьшения размера дерева.
По какому принципу делятся данные?
Данные в дереве решений разделяются на узлы и подузлы с использованием таких методов, как индекс Джини, энтропия и получение информации.
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. Матрица путаницы в машинном обучении »