为啥混淆矩阵中的总数与输入的数据不同?
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 中问其他无关的问题;而是打开一个新问题。以上是关于为啥混淆矩阵中的总数与输入的数据不同?的主要内容,如果未能解决你的问题,请参考以下文章