Автор|PRATEEK JOSHI Компилировать|ВКонтакте Источник | Аналитика Видья
Простая аналогия между деревьями решений и случайными лесами
Давайте начнем с мысленного эксперимента, который проиллюстрирует разницу между деревьями решений и моделями случайного леса.
Предположим, банку нужно одобрить небольшой кредит для клиента, и банку нужно быстро принять решение. Банк проверяет кредитную историю и финансы человека и обнаруживает, что он не выплатил старый кредит. Поэтому банк отклонил заявку.
Но проблема в том, что кредиты настолько малы для огромной казны банков, что они могли бы одобрить кредиты с очень низким риском. Таким образом, банк теряет возможность зарабатывать деньги.
Теперь еще одна заявка на кредит должна быть подана через несколько дней, но на этот раз банк придумал другую стратегию — множественные процессы принятия решений. Иногда он сначала проверяет кредитную историю, иногда сначала проверяет финансовое положение клиента и сумму кредита. Затем банк объединяет результаты этих многочисленных процессов принятия решений, чтобы принять решение о выдаче кредита клиенту.
Даже если этот процесс занимает больше времени, чем предыдущий, банки могут извлечь выгоду из этого метода. Это классический пример, когда коллективное принятие решений лучше единого процесса принятия решений. Теперь вы знаете, что представляют собой эти два процесса, верно?
Они обозначают деревья решений и случайные леса соответственно! Здесь мы подробно рассмотрим эту идею, углубимся в ключевые различия между двумя подходами и ответим на ключевой вопрос: какой алгоритм следует использовать?
содержание
-
Введение в деревья решений
-
Введение в случайные леса
-
Конфликт между случайным лесом и деревом решений
-
Почему случайные леса лучше, чем деревья решений?
-
Деревья решений против случайных лесов — когда какой алгоритм выбрать?
Введение в деревья решений
Дерево решений — это контролируемый алгоритм машинного обучения, который можно использовать для задач классификации и регрессии. Дерево решений — это просто последовательность последовательных решений, принимаемых для достижения определенного результата. Вот пример дерева решений в действии (на примере выше):
Давайте разберемся, как работает это дерево.
Во-первых, он проверяет, есть ли у клиента хорошая кредитная история. На этом основании клиенты делятся на две категории: клиенты с хорошей кредитной историей и клиенты с плохой кредитной историей. Затем он проверяет доход клиента и снова делит его на две группы. Наконец, он проверяет сумму кредита, запрошенную клиентом. На основе результатов изучения этих трех характеристик дерево решений решает, следует ли одобрить кредит клиента.
Функции/атрибуты и условия могут меняться в зависимости от сложности данных и проблемы, но общая идея остается неизменной. Таким образом, дерево решений принимает ряд решений на основе набора функций/атрибутов данных (в данном случае кредитной истории, дохода и суммы кредита).
Теперь вы можете подумать:
Почему деревья решений сначала проверяют кредитный рейтинг, а не доход?
Это называется важностью признаков, и последовательность признаков для изучения определяется в соответствии с такими критериями, как коэффициент Джини или прирост информации. Объяснение этих концепций выходит за рамки этой статьи, но вы можете обратиться к любому из следующих ресурсов, чтобы узнать все о деревьях решений:
Примечание. Идея этой статьи — сравнить деревья решений и случайные леса. Поэтому я не буду подробно останавливаться на основных понятиях.
Введение в случайные леса
Алгоритмы дерева решений легко понять и объяснить. Но часто одного дерева недостаточно для получения достоверных результатов. Это вводит понятие случайного леса.
Random Forest — это алгоритм машинного обучения на основе деревьев, который использует возможности нескольких деревьев решений для принятия решений. Как следует из названия, это «лес» деревьев!
Но почему мы называем его «случайным» лесом? Это потому, что это лес случайно созданных деревьев решений. Каждый узел в дереве решений работает со случайным подмножеством функций для вычисления выходных данных. Затем случайный лес объединяет выходные данные отдельных деревьев решений для получения окончательного результата.
вообще говоря:
Алгоритм случайного леса объединяет выходные данные нескольких (случайно созданных) деревьев решений для получения окончательного результата.
Процесс объединения результатов нескольких отдельных моделей (также известных как слабые учащиеся) называется ансамблевым обучением.
Теперь возникает вопрос, как решить, какой алгоритм выбрать между деревьями решений и случайными лесами? Прежде чем делать какие-либо выводы, давайте посмотрим, как они выглядят на практике!
Конфликт между случайным лесом и деревом решений
В этом разделе мы будем использовать Python для решения задачи бинарной классификации с использованием деревьев решений и случайных лесов. Затем мы сравним их результаты, чтобы увидеть, какой из них лучше всего подходит для нашей задачи.
Мы разработаем набор данных прогнозирования кредита. Это проблема бинарной классификации, в которой мы должны решить, должен ли человек получить кредит на основе определенного набора характеристик.
Адрес набора данных:данные hack.analytics vi.com/contest/PRA…
Шаг 1: Загрузите библиотеки и наборы данных
Сначала импортируйте необходимые библиотеки и наборы данных Python:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import f1_score
from sklearn.model_selection import train_test_split
# 导入数据集
df=pd.read_csv('dataset.csv')
df.head()
Набор данных состоит из 614 строк и 13 функций, включая кредитную историю, семейное положение, сумму кредита и пол. Здесь целевой переменной является Loan_Status, которая указывает, следует ли кому-то предложить ссуду.
Шаг 2: Предварительная обработка данных
Теперь является наиболее важной частью каких-либо проектов науки о данных - предварительная обработка данных и проектирование. В этом разделе я буду работать с категорическими переменными в данных и ввести недостающие значения.
Я собираюсь вменять пропущенные значения в категориальные переменные, используя шаблоны, и средние значения (для отдельных столбцов) для непрерывных переменных. Кроме того, мы пометим категориальные значения в данных.
#数据预处理与空值插补
# 标签编码
df['Gender']=df['Gender'].map({'Male':1,'Female':0})
df['Married']=df['Married'].map({'Yes':1,'No':0})
df['Education']=df['Education'].map({'Graduate':1,'Not Graduate':0})
df['Dependents'].replace('3+',3,inplace=True)
df['Self_Employed']=df['Self_Employed'].map({'Yes':1,'No':0})
df['Property_Area']=df['Property_Area'].map({'Semiurban':1,'Urban':2,'Rural':3})
df['Loan_Status']=df['Loan_Status'].map({'Y':1,'N':0})
#零值插补
rev_null=['Gender','Married','Dependents','Self_Employed','Credit_History','LoanAmount','Loan_Amount_Term']
df[rev_null]=df[rev_null].replace({np.nan:df['Gender'].mode(),
np.nan:df['Married'].mode(),
np.nan:df['Dependents'].mode(),
np.nan:df['Self_Employed'].mode(),
np.nan:df['Credit_History'].mode(),
np.nan:df['LoanAmount'].mean(),
np.nan:df['Loan_Amount_Term'].mean()})
Шаг 3. Создайте обучающие и тестовые наборы
Теперь разделим набор данных на обучающую и тестовую выборки в соотношении 80:20:
X=df.drop(columns=['Loan_ID','Loan_Status']).values
Y=df['Loan_Status'].values
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 42)
Давайте посмотрим на форму созданных наборов поездов и тестов:
print('Shape of X_train=>',X_train.shape)
print('Shape of X_test=>',X_test.shape)
print('Shape of Y_train=>',Y_train.shape)
print('Shape of Y_test=>',Y_test.shape)
Очень хороший! Теперь мы готовы перейти к следующему этапу, где мы будем строить деревья решений и модели случайного леса!
Шаг 4: Создайте и оцените модель
Поскольку у нас есть обучающие и тестовые наборы, пришло время обучить нашу модель и классифицировать кредитные заявки. Сначала мы обучим дерево решений на этом наборе данных:
# 建立决策树
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier(criterion = 'entropy', random_state = 42)
dt.fit(X_train, Y_train)
dt_pred_train = dt.predict(X_train)
Далее мы будем использовать оценку F1 для оценки этой модели. Оценка F1 представляет собой гармоническое среднее точности и полноты, а формула выглядит следующим образом:
Давайте используем оценку F1 для оценки производительности нашей модели:
#训练集评估
dt_pred_train = dt.predict(X_train)
print('Training Set Evaluation F1-Score=>',f1_score(Y_train,dt_pred_train))
Здесь вы можете видеть, что дерево решений хорошо работает при оценке в выборке, но его производительность резко падает при оценке вне выборки. Как вы думаете, почему это так? Здесь происходит переоснащение. Могут ли случайные леса решить эту проблему?
Построить модель случайного леса
Давайте посмотрим на модель случайного леса в действии:
# 建立随机森林分类器
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(criterion = 'entropy', random_state = 42)
rfc.fit(X_train, Y_train)
#训练集评估
rfc_pred_train = rfc.predict(X_train)
print('Training Set Evaluation F1-Score=>',f1_score(Y_train,rfc_pred_train))
Здесь мы ясно видим, что модель случайного леса работает лучше, чем дерево решений при оценке вне выборки. Давайте обсудим причины этого в следующем разделе.
Почему модель случайного леса лучше, чем дерево решений?
Случайные леса используют возможности нескольких деревьев решений. Это не зависит от важности функции, заданной одним деревом решений. Давайте посмотрим на важность функции, которую разные алгоритмы присваивают разным функциям:
feature_importance=pd.DataFrame({
'rfc':rfc.feature_importances_,
'dt':dt.feature_importances_
},index=df.drop(columns=['Loan_ID','Loan_Status']).columns)
feature_importance.sort_values(by='rfc',ascending=True,inplace=True)
index = np.arange(len(feature_importance))
fig, ax = plt.subplots(figsize=(18,8))
rfc_feature=ax.barh(index,feature_importance['rfc'],0.4,color='purple',label='Random Forest')
dt_feature=ax.barh(index+0.4,feature_importance['dt'],0.4,color='lightgreen',label='Decision Tree')
ax.set(yticks=index+0.4,yticklabels=feature_importance.index)
ax.legend()
plt.show()
Как показано на рисунке выше, модель дерева решений отдает высокий приоритет определенному набору функций. Но функции выбираются случайным образом во время обучения. Следовательно, он не сильно зависит от какого-либо конкретного набора функций. Это особый эффект случайных лесов.
Следовательно, случайные леса могут лучше обобщать данные. Этот случайный выбор признаков делает случайные леса более точными, чем деревья решений.
Итак, что выбрать: дерево решений или случайный лес?
Случайный лес подходит, когда у нас есть большой набор данных, и интерпретируемость не является главной проблемой.
Деревья решений легче интерпретировать и понимать. Поскольку случайный лес объединяет несколько деревьев решений, его становится сложнее интерпретировать. Хорошая новость заключается в том, что случайный лес можно объяснить.
Кроме того, у случайных лесов больше времени обучения, чем у одиночных деревьев решений. Вы должны принять это во внимание, потому что по мере того, как мы увеличиваем количество деревьев в случайном лесу, время, необходимое для обучения каждого дерева, также увеличивается. Это часто имеет решающее значение, когда ваш DDL тесно связан с проектом машинного обучения.
Но я бы сказал, что, несмотря на нестабильность и зависимость от определенного набора функций, деревья решений очень полезны, потому что их легче интерпретировать и легче обучать. Любой, у кого мало знаний в области науки о данных, также может использовать деревья решений для быстрого принятия решений на основе данных.
конец
Дебаты между деревом решений и случайным лесом, вот что вам нужно знать. Это может быть сложно, если вы новичок в машинном обучении, но эта статья должна прояснить для вас эти различия и сходства.
Оригинальная ссылка:Woohoo.Со слов аналитиков vi.com/blog/2020/0…
Добро пожаловать на сайт блога Panchuang AI:panchuang.net/
sklearn машинное обучение китайские официальные документы:sklearn123.com/
Добро пожаловать на станцию сводки ресурсов блога Panchuang:docs.panchuang.net/