如何获取 Scikit-learn 的 svm 中的训练误差?

Posted

技术标签:

【中文标题】如何获取 Scikit-learn 的 svm 中的训练误差?【英文标题】:How to obtain the training error in svm of Scikit-learn? 【发布时间】:2013-07-30 23:37:37 【问题描述】:

我的问题:如何获取 svm 模块(SVC 类)中的训练错误?

我正在尝试根据使用的训练数据数量(或其他特征,如 C / gamma )绘制训练集和测试集的误差图。但是,根据SVM documentation ,没有这样的公开属性或方法来返回此类数据。我确实发现 RandomForestClassifier 确实暴露了一个 oob_score_。

【问题讨论】:

上面答案中通过代码sn-p得到的值,是ACCURACY还是ERROR?抱歉,我将其发布为答案,我无法对上一篇文章发表评论,因为我的“声誉”少于 50 个 【参考方案1】:

只计算训练数据的分数:

>>> model.fit(X_train, y_train).score(X_train, y_train)

您还可以使用sklearn.metrics 模块中的任何其他性能指标。文档在这里:

http://scikit-learn.org/stable/modules/model_evaluation.html

另外:oob_score_ 是测试/验证分数的估计值,而不是训练分数。

【讨论】:

感谢 Olivier 指出。这仍然令人费解:我尝试上述方法的几个数据集的训练误差为 0.0。我什至在 Kaggle 上尝试了数字识别,但在只有 1 棵树的随机森林中仍然产生 0 训练错误。虽然测试误差相当高。怎么会? (从我在 Andrew Ng 的视频中看到的内容来看,你仍然会看到一条递减曲线,而不是完美的 0.0 训练误差)。 这是意料之中的:训练误差可以为零,而测试误差很少如此。两者之间的较大差距表示过度拟合(使用不当或内存容量妨碍了良好的泛化)。大的训练误差表示欠拟合(模型中没有足够的内存容量)。树模型是实例学习器:如果您不将它们限制在有限的深度,它们可以使用单个展开的树来记忆完整的数据集。 欠拟合不是问题,但过拟合才是问题。使用随机森林或其他随机树集合来对抗单棵树的过拟合行为。 谢谢奥利维尔!你在我的脑海中清除了很多问号。不过,我肯定也会用其他算法(不太复杂的模型)对其进行测试,以验证我的理解。 万一人们将来提到这个:我尝试了 naive_bayes.GaussianNB、naive_bayes.BernoulliNB、NearestCentroid 和其他一些非基于实例的学习器,训练误差不为零,因此确认高于 Olivier 的解释。再次感谢以上。【参考方案2】:

您甚至可以使用 'learning_curve' 绘制学习曲线。这是一个例子。

>>> from sklearn.model_selection import learning_curve
    
>>> train_sizes, train_scores, valid_scores = learning_curve(
...     SVC(kernel='linear'), X, y, train_sizes=[50, 80, 110], cv=5)

更多详情请参考这里-https://scikit-learn.org/stable/modules/learning_curve.html

【讨论】:

你能看看这里吗? ***.com/questions/64525145/…

以上是关于如何获取 Scikit-learn 的 svm 中的训练误差?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scikit-learn 的 SVM 中使用非整数字符串标签? Python

如何在 scikit-learn 中继续训练 svm 和 knn?

如何获得 scikit-learn SVM 分类器的所有 alpha 值?

如何让 SVM 很好地处理 scikit-learn 中的缺失数据?

目标的缩放导致 Scikit-learn SVM 回归崩溃

Scikit-learn 的带有线性内核 svm 的 GridSearchCV 耗时太长