我的模型是否应该总是在训练数据集上给出100%的准确性?

问题描述 投票:0回答:1
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))

我正在训练数据集上测试我的模型。它给我的结果如下。

                          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%的准确率?

python machine-learning scikit-learn tf-idf naivebayes
1个回答
1
投票

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


1
投票

TL:DR: 是的,在测试数据集上有更好的表现是可以的。

分类(监督学习)中最重要的问题是泛化的问题,也就是生产中(或测试数据集上)的表现。其实,你的学习数据集上的表现并不重要,因为它只是用来学习你的模型。一旦完成,你将永远不会使用它,只有在学习过程中没有看到的数据上的表现将被提交给模型。

一个足够复杂的统计模型(它有足够的 能力)可以完美地拟合到任何学习数据集,并在其上获得100%的准确率。但是,通过对训练集的完美拟合,它在训练过程中没有看到的新数据上的表现会很差(超配). 因此,这不是你感兴趣的。因此,你可以接受降低在训练数据集上的性能,以便更好地泛化,也就是在学习过程中没有用到的数据上获得更好的性能。这就是所谓的 正规化.

不过,对于你的情况,我并不确定。MultinomialNB 允许控制正则化。你应该尝试一下sklearn的其他分类器,比如建议的 此处.


0
投票

我觉得还是用交叉验证的结果来看一个准确的估计你的准确性。交叉验证被认为是避免过度拟合的有效方法。

from sklearn.model_selection import cross_val_score

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

而且,你可以报告平均分值。scores.mean().

© www.soinside.com 2019 - 2024. All rights reserved.