具有KFold交叉验证的Scikit学习决策树

时间:2018-10-21 17:08:47

标签: python scikit-learn decision-tree cross-validation

我对scikit学习/机器学习比较陌生。我必须使用Titanic数据集创建决策树,并且它需要使用5折的KFold交叉验证。这是我到目前为止的内容:

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()

我的问题是,拟合模型是否仅存在于循环中?我需要从未标记“生存”的测试训练集中准确预测(在混淆矩阵中,X_Test是测试数据集X值,而y_test是实际存活率),我不确定通过使用此训练来确定方法,即使用折叠中的每个集合来训练我的主要分类器(tree_model)。

1 个答案:

答案 0 :(得分:1)

您似乎在每次迭代时都在重新训练模型。只有一个模型实例,您创建为for (var i = 0; i < num; i++) { html += '<div class="row">'; for (var j = 0; j < num; j++) { html += ` <div class="col-md-1">0</div>`; } html += "</div>"; } 。然后,在每次迭代时创建另一个指向同一实例的指针,称为tree_model

查看sklearn中的网格搜索功能: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html