-1

В последнее время я возился с моделями Random Forest, и они действительно полезны с атрибутом feature_importance_!Как получить прогностические атрибуты каждой цели в «Случайном лесу»?

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

Например, что если 1st and 2nd attributes были более предиктором distringuishing target 0 но 3rd and 4th attributes были более предиктором target 1?

Есть ли способ получить массив feature_importance_ для каждой цели отдельно? С sklearn, scipy, pandas, или numpy предпочтительно.

# Iris dataset 
DF_iris = pd.DataFrame(load_iris().data, 
         index = ["iris_%d" % i for i in range(load_iris().data.shape[0])], 
         columns = load_iris().feature_names) 

Se_iris = pd.Series(load_iris().target, 
         index = ["iris_%d" % i for i in range(load_iris().data.shape[0])], 
         name = "Species") 
# Import modules 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.cross_validation import train_test_split 

# Split Data 
X_tr, X_te, y_tr, y_te = train_test_split(DF_iris, Se_iris, test_size=0.3, random_state=0) 

# Create model 
Mod_rf = RandomForestClassifier(random_state=0) 
Mod_rf.fit(X_tr,y_tr) 

# Variable Importance 
Mod_rf.feature_importances_ 
# array([ 0.14334485, 0.0264803 , 0.40058315, 0.42959169]) 

# Target groups 
Se_iris.unique() 
# array([0, 1, 2]) 
+0

Я не уверен в конкретных целях, но если вы еще не отметили, что xgboost имеет общий атрибут значимости. –

ответ

1

На самом деле это не так, как работает РФ. Поскольку нет простого «голосового голосования» (которое имеет место в линейных моделях), действительно сложно ответить на вопрос, что «особенность X более предсказуема для цели Y» даже означает. Какая особенность является особенностью RF-захватов, «насколько вероятна, в общем, использовать эту функцию в процессе принятия решений». Проблема с решением вашего вопроса заключается в том, что если вы спросите: «Насколько вероятно, что использование этой функции в процессе принятия решений , ведущее к ярлыку Y,« вам придется в значительной степени выполнить ту же процедуру, но удалить все поддеревья, которые не содержат ярлык Y в листе - таким образом вы удаляете части процесса принятия решения, которые не затрагивают проблему «это Y или нет Y», а скорее пытаются ответить, что «не Y» это. Однако на практике, из-за очень стохастической природы РФ, резки ее глубины и т. Д., Это вряд ли может свести к нулю. Плохая новость заключается в том же, что я никогда не видел, как это реализовано в любой стандартной библиотеки РФ, вы можете сделать это на свой собственный, именно так, как я сказал:

for i = 1 to K (K is number of distinct labels) 
    tmp_RF = deepcopy(RF) 
    for tree in tmp_RF: 
    tree = remove_all_subtrees_that_do_not_contain_given_label(tree, i) 
    for x in X (X is your dataset) 
     features_importance[i] += how_many_times_each_feature_is_used(tree, x)/|X| 
    features_importance[i] /= |tmp_RF| 
return features_importance 

, в частности, вы можете использовать существующие коды feature_importance, просто Выполнение

for i = 1 to K (K is number of distinct labels) 
    tmp_RF = deepcopy(RF) 
    for tree in tmp_RF: 
    tree = remove_all_subtrees_that_do_not_contain_given_label(tree, i) 
    features_importance[i] = run_regular_feature_importance(tmp_RF) 
return features_importance 
+0

Привет, спасибо за ваш ответ! Еще нужно расшифровать часть смысла в нем, чтобы полностью понять, о чем вы говорите. Что такое 'deepcopy'? –

+0

По deepcopy я имею в виду копию, которая является рекурсивной, чтобы убедиться, что у вас есть копия каждого дерева, а не только копия ссылок – lejlot

+0

Woah, как копия каждого дерева решений в случайном лесу? –

 Смежные вопросы

  • Нет связанных вопросов^_^