繁体   English   中英

我的 model 是否应该始终在训练数据集上提供 100% 的准确度?

[英]Should my model always give 100% accuracy on Training dataset?

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))

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

                          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% 的准确率是否可以接受?

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

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

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

足够复杂(具有足够容量)的统计 model 可以完美地拟合任何学习数据集并获得 100% 的准确率。 但是通过完美地拟合训练集,它将在训练期间看不到的新数据上表现不佳(过度拟合)。 因此,这不是你感兴趣的。 因此,您可以接受降低训练数据集的性能以更好地泛化,即在学习期间未使用的数据上获得更好的性能。 这称为正则化

在您的情况下,我仍然不确定MultinomialNB是否允许控制正则化。 您应该尝试其他的 sklearn 分类器,例如这里提出的。

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

from sklearn.model_selection import cross_val_score

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM