Scikit Learn - Дерево решений с перекрестной проверкой KFold - PullRequest
0 голосов
/ 21 октября 2018

Я относительно новичок в изучении scikit / машинного обучения.Я должен создать дерево решений, используя набор данных Titanic, и для этого нужно использовать перекрестную проверку KFold с 5-кратными сгибами.Вот что у меня есть:

cv = KFold(n_splits=5)

tree_model = tree.DecisionTreeClassifier(max_depth=3)
print(titanic_train.describe())
fold_accuracy = []
for train_index, valid_index in cv.split(X_train):
    train_x,test_x = X_train.iloc[train_index],X_train.iloc[valid_index]
    train_y,test_y= y_train.iloc[train_index], y_train.iloc[valid_index]

    model = tree_model.fit(train_x,train_y)
    valid_acc = model.score(test_x,test_y)
    fold_accuracy.append(valid_acc)
    print(confusion_matrix(y_test,model.predict(X_test)))

print("Accuracy per fold: ", fold_accuracy, "\n")
print("Average accuracy: ", sum(fold_accuracy)/len(fold_accuracy))
dot_data = StringIO()

Мой вопрос: существует ли моя подобранная модель только внутри цикла?Мне нужно точно предсказать из тестового учебного набора при условии, что «Survived» не имеет маркировки (в матрице путаницы X_Test - это набор тестовых данных X значений, а y_test - фактическая выживаемость), и я не уверен, что при обучении с использованием этогометод, что мой основной классификатор (tree_model) обучается с использованием каждого набора в сгибе.

1 Ответ

0 голосов
/ 21 октября 2018

Кажется, вы переучиваете свою модель на каждой итерации.Существует только один экземпляр модели, который вы создали как tree_model.Затем вы создаете другой указатель на тот же экземпляр с именем model на каждой итерации.

Проверьте функциональность поиска по сетке в sklearn: http://scikit -learn.org / stable / modules / generate / sklearn.model_selection.GridSearchCV.html

...