首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我的模型应该总是在训练数据集上提供100%的准确率吗?

我的模型应该总是在训练数据集上提供100%的准确率吗?
EN

Stack Overflow用户
提问于 2020-06-04 11:42:42
回答 3查看 4.7K关注 0票数 2
代码语言:javascript
代码运行次数:0
运行
复制
from sklearn.naive_bayes import MultinomialNB # Multinomial Naive Bayes on Lemmatized Text

X_train, X_test, y_train, y_test = train_test_split(df['Rejoined_Lemmatize'], df['Product'], random_state = 0)

X_train_counts = tfidf.fit_transform(X_train)
clf = MultinomialNB().fit(X_train_counts, y_train)
y_temp = clf.predict(tfidf.transform(X_train))

我正在训练数据集本身上测试我的模型。它给了我以下结果:

代码语言:javascript
代码运行次数:0
运行
复制
                          precision    recall  f1-score   support

               accuracy                           0.92    742500
              macro avg       0.93      0.92      0.92    742500
           weighted avg       0.93      0.92      0.92    742500

在训练数据集上获得100%的accuracy<是可以接受的吗?

EN

回答 3

Stack Overflow用户

发布于 2020-06-04 11:49:50

不,你不应该从你的训练数据集中获得100%的准确率。如果是这样,可能意味着你的模型过度拟合了。

票数 5
EN

Stack Overflow用户

发布于 2020-06-04 15:35:09

TL:DR:是的,在测试数据集上有更好的性能是可以获得的

分类(监督学习)中最重要的问题是泛化问题,即生产(或测试数据集)中的性能。实际上,学习数据集上的性能并不重要,因为它只用于学习模型。一旦完成,您将永远不会使用它,并且仅在学习过程中未见过的数据上的性能将提交给模型。

一个足够复杂(具有足够容量)的统计模型可以完美地拟合任何学习数据集,并在其上获得100%的准确率。但是,通过完美地拟合训练集,它在训练期间看不到的新数据上的性能将很差(过度拟合)。因此,这不是你感兴趣的东西。因此,您可以接受降低训练数据集的性能,以便更好地泛化,也就是说,在学习期间未使用的数据上获得更好的性能。这就是正则化。

在您的情况下,我仍然不确定MultinomialNB是否允许控制正则化。你应该尝试其他的sklearn分类器,比如proposed here

票数 2
EN

Stack Overflow用户

发布于 2020-06-04 17:06:57

我认为最好使用交叉验证结果来准确估计您的准确性。交叉验证被认为是避免过度拟合的一种有效方法。

代码语言:javascript
代码运行次数:0
运行
复制
from sklearn.model_selection import cross_val_score

scores = cross_val_score(clf, X_train, y_train, cv=10) 

并且,您可以报告平均分的值:scores.mean()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62186526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档