2014-02-13 5 views
1

У меня есть некоторые данные, которые я подгонял sklearn DecisionTreeClassifier. Поскольку классификатор использует бит случайности, я запускаю его несколько раз и сохраняю лучшую модель. Однако я хочу иметь возможность повторно собирать данные и получать одинаковые результаты на другой машине.Найти случайное состояние классификатора дерева решений sklearn

Есть ли способ узнать, что было начальным random_state после того, как я обучил модель для каждого классификатора?

EDIT В sklearn модели имеют метод, называемый get_params(), который показывает, что входы были. Но для random_state он все еще говорит None. Однако согласно документации, когда это так, он использует numpy для создания случайного числа. Я пытаюсь выяснить, что это случайное число было

+0

В интерактивных документах указывается, что по умолчанию 'random_state' является' None', поэтому это выглядит корректно, см. Это: http: //scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html – EdChum

+0

Я знаю, что это использование по умолчанию, что я прошу, когда я использую 'random_state = None', и я подхожу к модели, после того как фитинг есть способ узнать, что такое результат' numpy.random'? – sedavidw

ответ

3

Вы должны пройти явное случайное состояние конструктору d дерева:

>>> DecisionTreeClassifier(random_state=42).get_params()['random_state'] 
42 

Оставив его значение по умолчанию None означает, что fit метод будет использовать однонаправленное случайное состояние, которое не является предсказуемым и не является одинаковым во всех прогонах.

+0

Возможно, я не правильно сформулировал свой вопрос. Мне интересно, если я использовал 'random_state = None', и он использует' numpy.random', как и следовало ожидать, есть ли способ узнать, когда модель подходит, чтобы узнать, что результат от 'numpy.random' был? – sedavidw

+1

@sedavidw: в этом случае ответ «это невозможно». –

+0

Я боялся этого, спасибо – sedavidw

1

Я бы предположил, что для этой цели потенциально лучше использовать случайный лес - в Random Forests есть несколько деревьев, смоделированных на подмножествах ваших предикторов. Затем вы можете увидеть random_states, которые были использованы в модели, просто используя RandomForestVariableName.estimators_

Я буду использовать свой код в качестве примера здесь:

with open('C:\Users\Saskia Hill\Desktop\Exported\FinalSpreadsheet.csv', 'rb') as csvfile: 
    titanic_reader = csv.reader(csvfile, delimiter=',', quotechar='"') 
    row = titanic_reader.next() 
    feature_names = np.array(row) 

    # Load dataset, and target classes 
    titanic_X, titanic_y = [], [] 
    for row in titanic_reader: 
    titanic_X.append(row) 
    titanic_y.append(row[11]) # The target values are your class labels 

    titanic_X = np.array(titanic_X) 
    titanic_y = np.array(titanic_y) 
    print titanic_X, titanic_y 

print feature_names, titanic_X[0], titanic_y[0] 
titanic_X = titanic_X[:, [2,3,4,5,6,7,8,9,10]] #these are your predictors/ features 
feature_names = feature_names[[2,3,4,5,6,7,8,9,10]] 

from sklearn import tree 

rfclf = RandomForestClassifier(criterion='entropy', min_samples_leaf=1, max_features='auto', max_leaf_nodes=None, verbose=0) 

rfclf = rfclf.fit(titanic_X,titanic_y) 

rfclf.estimators_  #the output for this is pasted below: 

[DecisionTreeClassifier(compute_importances=None, criterion='entropy', 
     max_depth=None, max_features='auto', max_leaf_nodes=None, 
     min_density=None, min_samples_leaf=1, min_samples_split=2, 
     random_state=1490702865, splitter='best'), 
DecisionTreeClassifier(compute_importances=None, criterion='entropy', 
     max_depth=None, max_features='auto', max_leaf_nodes=None, 
     min_density=None, min_samples_leaf=1, min_samples_split=2, 
     random_state=174216030, splitter='best') ...... 

Случайные леса, таким образом, ввести хаотичность в Деревья принятия решений и не требуют корректировки от исходных данных, используемых Деревом решений, но они действуют как метод перекрестной проверки, обеспечивающий вам большую уверенность в точности ваших данных (особенно, если, как и я, у вас есть небольшой Набор данных).

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