В предыдущем посте мы рассмотрели основы деревьев, как они разбиваются, как они вычисляются и как классификатор приходит к конкретному прогнозу, используя примеры кода.
В этом посте мы переходим к следующему шагу — ансамблевому методу обучения для классификации, регрессии и других задач, который работает путем построения множества деревьев решений во время обучения и вывода класса, который является режимом классов или средним предсказанием отдельные деревья. Случайный лес похож на алгоритм начальной загрузки с моделью дерева решений (CART).
В последние несколько лет случайный лес стал расцветающей техникой машинного обучения. Это нелинейная древовидная модель, которая часто дает точные результаты. Однако, будучи черным ящиком, его часто трудно интерпретировать и полностью понять, особенно когда дело доходит до объяснения результатов и их обоснования заинтересованным сторонам в организациях.
От деревьев решений к лесу:
Мы начали предыдущий пост с деревьев решений, так как же нам перейти от дерева решений к лесу?
Это просто, поскольку предсказание леса — это среднее значение предсказаний его деревьев, предсказание — это просто среднее значение условий смещения плюс средний вклад каждого признака.
Шаги:
1) Предположим, что количество случаев в обучающей выборке равно N. Затем случайным образом, но с заменой, берется выборка из этих N случаев. Этот образец будет обучающим набором для выращивания дерева.
2) Если имеется M входных переменных, задается число m ‹ M так, чтобы в каждом узле m переменных выбирались случайным образом из M. Среди признаков "m" вычислите узел "d", используя лучшую точку разделения для разделения узла. Значение m поддерживается постоянным, пока мы выращиваем лес. Узлы далее разбиваются на дочерние узлы с использованием наилучшего разделения.
Критерии разделения аналогичны критериям регрессора дерева решений в scikit-learn.
3) Постройте лес, повторив описанные выше шаги n раз, чтобы создать n количество деревьев (n_estimators в scikit-learn). Каждое дерево выращено в максимально возможной степени и не требует обрезки.
4) Прогнозировать новые данные путем агрегирования прогнозов ntree( количество «n» деревьев) (т. е. большинство голосов за классификацию, среднее для регрессии).
Давайте посмотрим на реализацию тех,
rf.fit(X_train, y_train)
Опять же, превращение черного ящика в белый ящик для предсказания случайного леса.
rf_prediction, rf_bias, rf_contributions = ti.predict(rf, instances) rf_ft_list = [] for i in range(len(instances)): print("Bias (trainset mean)", rf_bias[i]) for c, feature in sorted(zip(rf_contributions[i], x.columns), key=lambda x: -abs(x[0])): rf_ft_list.append((feature, round(c, 2))) print("-"*50)
rf_labels, rf_values = zip(*rf_ft_list) rf_ft_list
Что это говорит нам?
Как видно из приведенных выше результатов, 4 функции оказывают положительное влияние на повышение цен, но на этот раз широта времени оказывает очень сильное негативное влияние, в результате чего прогнозы намного меньше, чем систематическая ошибка (среднее значение набора поездов).
Глядя на вклады, прогнозы и условия смещения.
rf_contributions
rf_prediction
rf_bias
Опять же, прогноз должен быть равен «смещение + вклад функции (1) + … + вклад функции (n)».
print(rf_bias + np.sum(rf_contributions, axis=1))
Подобно тому, как мы видели в предыдущем посте, как дерево решений пришло к результатам, давайте посмотрим, как случайный лес пришел к своим прогнозам.
from sklearn.ensemble import RandomForestRegressor rf_model = RandomForestRegressor(n_estimators=10) top5xrf = X_train.head(5) top5yrf = y_train.head(5) rf_model.fit(top5xrf, top5yrf)
Извлечение одного дерева для визуализации результатов,
estimator = rf_model.estimators_[5] from sklearn.externals.six import StringIO from IPython.display import Image from sklearn.tree import export_graphviz import pydotplus dot_data1 = StringIO() export_graphviz(estimator, out_file=dot_data1, filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data1.getvalue()) Image(graph.create_png())
Хотя одно изображение не решит проблему, просмотр отдельного дерева решений показывает нам, что случайный лес — это не необъяснимый метод, а последовательность логических вопросов и ответов, и каждое предсказание можно тривиально представить как сумму вкладов признаков. , показывающий, как функции приводят к определенному прогнозу.
Это открывает массу возможностей в практических задачах машинного обучения.
Похлопайте, если вы нашли этот пост полезным! Ваше здоровье.