在IMDB情感分析中取得了极高的准确率。我是否遗漏了训练数据泄露的问题?

我在使用Python的sklearn库测试一个情感分析分类器时,获得了异常高的准确率。这通常意味着存在某种训练数据泄露,但我无法确定是否真是如此。

我的数据集包含大约5万条非重复的IMDB评论。

import pandas as pdimport sklearnfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.feature_extraction.text import TfidfTransformerfrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn.linear_model import SGDClassifierfrom sklearn.model_selection import GridSearchCVfrom sklearn.pipeline import Pipelinefrom pprint import pprintfrom time import timefrom sklearn.metrics import classification_report,confusion_matrix,accuracy_score, roc_curve, auc, plot_confusion_matriximport matplotlib.pyplot as pltfrom sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(imdb_data.text, imdb_data.label, test_size=0.30, random_state=2)imdb_data=pd.read_csv('../../data/home/data/tm/en-sentiment/imdb_reviews_train.csv')imdb_data=imdb_data.drop_duplicates().reset_index(drop=True)imdb_data['label'] = imdb_data.label.map(lambda x: int(1) if x =='pos' else int(0) if x =='neg' else np.nan)x_train, x_test, y_train, y_test = train_test_split(imdb_data.text, imdb_data.label, test_size=0.30, random_state=2)pipeline = Pipeline([    ('vect', CountVectorizer()),    ('tfidf', TfidfTransformer()),    ('clf', SGDClassifier()),])parameters_final = {    'vect__max_df': [0.3],    'vect__min_df': [1],    'vect__max_features': [None],    'vect__ngram_range': [(1, 2)],     'tfidf__use_idf': (True, False),    'tfidf__norm': ['l2'],    'tfidf__sublinear_tf': (True, False),    'clf__alpha': (0.00001, 0.000001),    'clf__penalty': ['elasticnet'],    'clf__max_iter': [50],}grid_search = GridSearchCV(pipeline, parameters_final, n_jobs=-1, verbose=1, cv=3)grid_search.fit(x_train, y_train)y_pred = grid_search.predict(x_test)print("Accuracy: ", sklearn.metrics.accuracy_score(y_true=y_test, y_pred=y_pred))

输出:

Accuracy:  0.8967533466687183

评论数据集可以在这里找到

有什么线索吗?


回答:

测试是否存在数据泄露的一个好方法是检查你链接的存储库中的验证集的表现,在这里

我下载了数据集,并尝试构建一个像这样的朴素贝叶斯分类器的管道:

pipeline = Pipeline([    ('vect', CountVectorizer()),    ('tfidf', TfidfTransformer()),    ('clf', MultinomialNB()),])

使用你相同的训练-测试分割,我在训练集的保留数据上获得了0.86的准确率,在验证集上获得了0.83的准确率。如果你得到类似的结果,我认为可能只是这个数据集并不太难学习。我检查了是否有任何可能导致奇怪表现的NA值,但imdb_data.isnull().any()确实返回了false。

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

发表回复

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