超参数调优与分类算法比较

我对分类算法的比较有一些疑问。

我正在进行一个关于超参数调优和分类模型比较的项目,目的是找出适合我的数据集的最佳模型和最佳超参数。

例如:我有两个分类模型(SVM和随机森林),我的数据集有1000行和10列(9列是特征),最后一列是标签。

首先,我将数据集分为两部分(80-20),分别用于训练(800行)和测试(200行)。之后,我使用网格搜索和CV=10在训练集上对这两个模型(SVM和随机森林)进行超参数调优。当每个模型的超参数确定后,我使用这些超参数在训练集和测试集上再次测试准确率(Accuracy_score),以便找出哪个模型最适合我的数据(条件:训练集上的准确率低于测试集上的准确率(不过拟合),并且测试集上准确率较高的模型是最佳模型)。

然而,SVM显示训练集的准确率为100,而测试集的准确率为83.56,这意味着调优后的SVM存在过拟合。另一方面,随机森林显示训练集的准确率为72.36,测试集的准确率为81.23。显然,SVM的测试集准确率高于随机森林的测试集准确率,但SVM存在过拟合。

我有一些问题如下:

_ 我使用上述方法比较训练集和测试集的准确率,而不是使用交叉验证,这种方法是否正确?(如果使用交叉验证,应该如何操作?

_ 显然,上述SVM存在过拟合,但其测试集准确率高于随机森林的测试集准确率,我能否得出SVM是这种情况下最佳模型的结论?

谢谢!


回答:

你已经对寻找最佳模型进行了相当多的分析,这很好。然而,我建议你对你的调查进行一些扩展。因为你在寻找适合你数据的最佳模型,单独的“准确率”并不是评估模型的好指标。你还应该评估你的模型的“精确率(Precision Score)”、“召回率(Recall Score)”、“ROC曲线”、“敏感性(Sensitivity)”、“特异性(Specificity)”等。找出你的数据是否存在不平衡(如果存在,有技术可以解决这个问题)。在评估了所有这些指标后,你可能会得出决定。

对于训练-测试部分,你的做法基本上是正确的,只有一个问题(这是一个相当严重的问题),当你在测试集上测试你的模型时,你引入了一种偏见。所以我建议你将数据分为三部分,并在你的“训练集”上使用交叉验证(sklearn有你需要的工具)。交叉验证后,你可以使用另一个部分“验证集”来测试模型的泛化能力(对未见数据的表现),之后你可以调整一些参数。在你得出结论并调整了所有需要调整的内容后,才使用你的“测试集”无论测试集上的结果如何,都不要在此之后再更改模型,因为这些分数代表了你模型的真实能力。

你可以按以下方式将数据分为三部分,例如-

from sklearn.model_selection import train_test_split from sklearn.datasets import make_blobs #  示例用途的虚拟数据集X, y = make_blobs(n_samples=1000, centers=2, n_features=2, cluster_std=6.0)# 第一部分,即“训练集”和“测试集”X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.9, random_state=123)# 第二部分,我们将“训练集”分为两部分,从而创建新的“训练集”和“验证集”X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, train_size=0.9, random_state=123)print(X_train.shape, X_test.shape, X_val.shape)  # 输出 : ((810, 2), (100, 2), (90, 2))

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中创建了一个多类分类项目。该项目可以对…

发表回复

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