为啥混淆矩阵中的总数与输入的数据不同?

Posted

技术标签:

【中文标题】为啥混淆矩阵中的总数与输入的数据不同?【英文标题】:Why the the total number in confusion matrix not same as the data input?为什么混淆矩阵中的总数与输入的数据不同? 【发布时间】:2022-01-19 10:44:31 【问题描述】:

为什么总混淆矩阵没有与数据集相同数量的 os 样本?数据集包含 7514,但混淆矩阵的总数不超过 2000。

代码如下:

import re
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer

corpus = []
for i in range(len(dataset)):
  text = re.sub('[^a-zA-Z]', ' ', dataset['Text'][i])
  text = text.lower()
  text = text.split()
  ps = PorterStemmer()
  text = [ps.stem(word) for word in text if not word in set(stopwords.words('english'))]
  text = ' '.join(text)
  corpus.append(text)

import sklearn
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(max_features = 10000)
X = cv.fit_transform(corpus).toarray()
y = dataset.iloc[:, 1].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 42)

from sklearn import linear_model
classifier = linear_model.LogisticRegression(C=10)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print ("Confusion Matrix:\n",cm)

from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
score1 = accuracy_score(y_test,y_pred)
score2 = precision_score(y_test,y_pred)
score3= recall_score(y_test,y_pred)
print("\n")
print("Accuracy is ",round(score1*100,2),"%")
print("Precision is ",round(score2,2))
print("Recall is ",round(score3,2))

【问题讨论】:

欢迎来到 SO :) 请添加完整的数据准备代码,以便其他人对代码有更全面的了解。 @meti ive 更新帖子 请不要将不相关的问题“打包”到单个帖子中(已编辑);必要时打开多个问题 【参考方案1】:

使用train_test_split 拆分数据后,测试部分中留下2255 样本,几乎等于7514 X 0.3,然后使用这部分(测试部分)确定混淆矩阵。现在一切都应该有意义了。

【讨论】:

噢,现在我明白了。谢谢 @mino 请不要在 cmets 中问其他无关的问题;而是打开一个新问题。

以上是关于为啥混淆矩阵中的总数与输入的数据不同?的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵颜色匹配数据大小而不是分类精度

为啥这个混淆矩阵(matplotlib)在 Jupyter Notebook 中看起来被压扁了? [复制]

混淆矩阵与轴的不同标签

Python hmmlearn中的混淆矩阵是怎么表示的

混淆矩阵 - 测试情绪分析模型

混淆矩阵中的 Scikit-learn 变化阈值