为什么我的所有分类准确率得分都相同?

我正在运行几种机器学习模型以找到准确率得分最高的模型,然而,所有准确率得分都完全相同。我对社交媒体文本进行了自然语言处理,并训练我的模型根据NLTK确定的情感来标记情感。

我使用相同的训练和测试集,但我以前用过这种方法,在不同模型上得到了不同的分数。为什么我的所有分数都相同?我可能过拟合了吗?

这是我分割和训练的代码:

submissions_sentiment = submissions_df[["Clean_Body", "Clean_Title", "sentiment_label"]]dataset = submissions_sentimentX = dataset.iloc[:, :-1]y = dataset.iloc[:, -1].valuesX_arr = []for index, row in X.iterrows():    X_arr.append(row.values)from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X_arr, y, test_size = 0.2, random_state = 0)def identity_tokenizer(text):    return textfrom sklearn.feature_extraction.text import CountVectorizervectorizer = CountVectorizer(tokenizer=identity_tokenizer, lowercase=False)# fit AND transform the model (only for training data)X_train_vectors = vectorizer.fit_transform(X_train)# transform the test dataX_test_vectors = vectorizer.transform(X_test)# Linear SVMfrom sklearn import svmclf_svm = svm.SVC(kernel="linear")clf_svm.fit(X_train_vectors, y_train)clf_svm_pred = clf_svm.predict(X_test_vectors)# Evaluate Model Accuracyfrom sklearn.metrics import accuracy_scoreaccuracy_score(y_test, clf_svm_pred) # Output is .86# Naive Bayesfrom sklearn.naive_bayes import GaussianNBclf_gnb = DecisionTreeClassifier()clf_gnb.fit(X_train_vectors, y_train)clf_gnb_pred = clf_gnb.predict(X_test_vectors)# Evaluate Model Accuracyaccuracy_score(y_test, clf_gnb_pred)# Output is .86

这是X-train的一个例子:

# Review data ouputprint(X_train_vectors.toarray())print(X_train[0])print(X_train_vectors[0])[[0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] ... [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0] [0 0 0 ... 0 0 0]]['我今年开始真正投资,并寻找长期持有的机会。大约五个月后,我决定暂时开始将资金投入到ETF中,同时我会进一步研究和了解公司。对于ETF,我考虑的有以下几个:VOO、QQQ。我正在寻找另一个非科技类别的ETF,以帮助分散我的持有。我在想XLC是否会是一个好的第三个ETF。我现在的计划是每个月将X金额投入到一个单一的ETF,然后下个月投入到下一个ETF,以此类推,基本上是持续将资金投入到这三个ETF中。我现在二十多岁,我的目标是长期持有,10到15年或更长时间。如果有人有其他ETF的建议,我将非常感激,因为我正在努力寻找合适的ETF来进入并希望随着时间的推移增长。提前感谢。' '哪些3个ETF适合分散投资并购买?']  (0, 517)  1  (0, 1007) 1

对于这个,y-train是1(正面)。

这是y_test和Kernel SVM的预测结果:

print(y_test)[ 1  1 -1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 -1  1  1  1  1 -1  1  1  1  1  1  1 -1  1  1  1  1  1  1  1  1  1  1  1 -1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 -1  1  1  1  1  1  1  1  1  1  1  1  1 -1  1  1  1  1  1 -1  1  1  1  1  1 -1 -1 -1  1 -1  1  1  1 -1  1 -1  1  1  1  1  1  1  1  1  1  1  1  1 -1  1  1  1 -1  1  1  1  1  1  1 -1  1 -1  1  1  1  1  1  1  1  1  1  1  1 -1  1  1  1  1  1 -1  1  1  1  1  1  1]print(clf_svm_pred)[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]

等等。决策树的输出也相同。

我做错了什么吗?


回答:

我不确定问题的原因是什么,但由于您的SVM模型和DecisionTreeClassifier总是输出1,我建议您尝试更复杂的模型,如RandomForestClassifier,看看结果如何。

我之前有过类似的经历,无论我如何调整训练超参数,模型总是给出相同的性能指标——这可能是由以下两种可能性引起的:

  1. 我们的数据不适合模型,例如向量中的所有值都是零:[0, 0, 0, 0, 0, 0, 0]
  2. 我们的模型太简单,只能进行线性建模,因此无法学习太复杂的映射函数。

由于您的SVM是用线性核构建的,您能否尝试一个更复杂的模型,看看结果如何?您能否检查一下您的X_train_vectors矩阵中是否全是零?

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

发表回复

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