使用Sci-Kit Learn进行K折交叉验证的数据集分割

我被分配了一个任务,需要创建一个决策树分类器,并使用训练集和10折交叉验证来确定准确率。我查看了cross_val_predict的文档,因为我认为这是我需要的模块。

我遇到的困难是数据集的分割。据我所知,通常情况下,train_test_split()方法用于将数据集分割成两个部分——训练集测试集。据我了解,对于K折验证,您需要进一步将训练集分割成K个部分。

我的问题是:我是否需要在一开始将数据集分割成训练集测试集


回答:

这取决于情况。我个人认为是的,您需要将数据集分割成训练集和测试集,然后您可以在训练集上进行K折交叉验证。为什么?因为在训练和调整模型后,在未见过的样本上进行测试是有趣的。

但有些人只是进行交叉验证。以下是我常用的工作流程:

# 数据分割
X_train, X_valid, Y_train, Y_valid = model_selection.train_test_split(X, Y, test_size=0.2, random_state=21)
# 在多个模型上进行交叉验证,以查看哪个模型给出最佳结果
print('开始交叉验证')
cv_score = cross_val_score(model, X_train, Y_train, scoring=metric, cv=5)
# 然后使用均值、标准差或绘图来可视化您刚获得的分数
print('平均CV分数 : ' + str(cv_score.mean()))
# 然后我使用另一个交叉验证来调整最佳(或前n个最佳)模型的超参数
for param in my_param:
    model = model_with_param
    cv_score = cross_val_score(model, X_train, Y_train, scoring=metric, cv=5)
    print('带参数的平均CV分数: ' + str(cv_score.mean()))
# 现在我有了模型的最佳参数,我可以训练最终模型
model = model_with_best_parameters
model.fit(X_train, y_train)
# 最后在测试集上测试调整后的模型
y_pred = model.predict(X_test)
plot_or_print_metric(y_pred, y_test)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注