2013-06-28 3 views
3

все!Внедрение случайного леса в Python

Может ли кто-нибудь дать мне совет по внедрению Random Forest в Python? В идеале мне нужно что-то, что выводит столько информации о классификаторах, как это возможно, особенно:

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

Я нашел довольно некоторые реализации, наиболее ш Известный один из них, вероятно, из scikit, но неясно, как это сделать (1) и (2) там (см. вопрос this). Другие реализации, похоже, имеют те же проблемы, кроме одного из openCV, но он находится в C++ (интерфейс python не охватывает все методы для Random Forests).

Кто-нибудь знает что-то, что удовлетворяет (1) и (2)? Альтернативно, любая идея, как улучшить реализацию scikit, чтобы получить функции (1) и (2)?

Решено: проверено исходное код sklearn.tree._tree.Tree. У этого есть хорошие комментарии (которые полностью описывают дерево):

children_left : int* 
    children_left[i] holds the node id of the left child of node i. 
    For leaves, children_left[i] == TREE_LEAF. Otherwise, 
    children_left[i] > i. This child handles the case where 
    X[:, feature[i]] <= threshold[i]. 

children_right : int* 
    children_right[i] holds the node id of the right child of node i. 
    For leaves, children_right[i] == TREE_LEAF. Otherwise, 
    children_right[i] > i. This child handles the case where 
    X[:, feature[i]] > threshold[i]. 

feature : int* 
    feature[i] holds the feature to split on, for the internal node i. 

threshold : double* 
    threshold[i] holds the threshold for the internal node i. 

ответ

2

Вы можете получить почти всю информацию в scikit-learn. В чем проблема? Вы даже можете визуализировать деревья, используя точки. Я не думаю, что вы можете узнать, какие сплит-кандидаты были отобраны случайным образом, но вы можете узнать, какие из них были выбраны в конце. Редактировать: Посмотрите на tree_ объект the decision tree. Я согласен, это не очень хорошо документировано. Там действительно должен быть пример, чтобы визуализировать листовые дистрибутивы и т. Д. Вы можете взглянуть на функцию визуализации, чтобы понять, как добраться до свойств.

+0

Да, я визуализировал дерево, а также проверил структуру tree_, надеясь что-то получить оттуда, но я не смог добраться до индексов учебных примеров, идущих в каждом поддереве, например (нет только индексов, которые соответствовали бы примеры обучения) – coffee

+0

Эти индексы находятся в случайном лесу afaik. Посмотрите, как вычисляется оценка OOB. –