分类报告结果



我认为我的参数有一些问题,因为我得到了不同的结果。由于代码量巨大,我将无法复制和粘贴所有代码,只能复制和粘贴相关部分。我使用不同的模型来预测一个账户是假的还是假的。模型示例如下:

rf = Pipeline([
('rfCV',FeaturesSelection.countVect),
('rf_clf',RandomForestClassifier(n_estimators=200,n_jobs=3))
])

rf.fit(DataPreparation.train_acc['Acc'],DataPreparation.train_acc['Label'])
predicted_rf = rf.predict(DataPreparation.test_acc['Acc'])
np.mean(predicted_rf == DataPreparation.test_acc['Label'])
Then I use K-Fold cross validation: 
def confusion_matrix(classifier):

k_fold = KFold(n_splits=5)
scores = []
confusion = np.array([[0,0],[0,0]])
for train_ind, test_ind in k_fold.split(DataPreparation.train_acc):
train_text = DataPreparation.train_acc.iloc[train_ind]['Acc'] 
train_y = DataPreparation.train_acc.iloc[train_ind]['Label']

test_text = DataPreparation.train_acc.iloc[test_ind]['Acc']
test_y = DataPreparation.train_acc.iloc[test_ind]['Label']

classifier.fit(train_text,train_y)
predictions = classifier.predict(test_text)

confusion += confusion_matrix(test_y,predictions)
score = f1_score(test_y,predictions)
scores.append(score)
return (print('Score:', sum(scores)/len(scores)))

将其应用于所有分类器

build_confusion_matrix(nb_pipeline)
build_confusion_matrix(svm_pipeline)
build_confusion_matrix(rf)

我得到:

Score: 0.5697
Score: 0.5325
Score: 0.5857

但是,如果我想创建如下分类报告:

print(classification_report(DataPreparation.test_acc['Label'], predicted_nb))
print(classification_report(DataPreparation.test_acc['Label'], predicted_svm))
print(classification_report(DataPreparation.test_acc['Label'], predicted_rf))

输出不同。例如:(NB(

precision    recall  f1-score   support
0.0       0.97      0.86      0.91       580
1.0       0.41      0.72      0.53        80

(SVM(

precision    recall  f1-score   support
0.0       0.94      0.96      0.95       580
1.0       0.61      0.53      0.52        80

如果我创建如下摘要报告:

f1 = f1_score(DataPreparation.test_acc['Label'], predicted_rf)
pres = precision_score(DataPreparation.test_acc['Label'], predicted_rf)
rec = recall_score(DataPreparation.test_acc['Label'], predicted_rf)
acc = accuracy_score(DataPreparation.test_acc['Label'], predicted_rf)

res = res.append({'Precision': pres, 
'Recall': rec, 'F1-score': f1, 'Accuracy': acc}, ignore_index = True)

我也得到了不同的结果。

我在看f1的成绩。我希望所有的分类报告都是一样的。

如果您发现我用于构建分类报告、分数和/或汇总表的参数有任何错误,请告诉我?

F1分数与类有内在联系。这就是为什么你的分类报告中有2个F1分数。当你打印f1_score(true,predicted(时,它只给你一个数字,根据sklearn的文档,这个数字默认为被分配为正的类的f1分数(来源:https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html,参数>平均值(。分类报告返回所有类型的平均值,但您包含的是微观f1分数,它与以前的f1分数不同,是根据真阳性、假阴性和假阳性总数计算的(如果您检查https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html,在所提供的示例中,类别2的micro f1为80%,因为2'2被正确地分类为2',另外2个实例被正确地归类为'2'而不是'2',并且一个'2'没有被分类为'2''(。现在,如果你提供的第一个分数与上一个分数不同,尽管它们都是由同一个sklearn函数调用的,那是因为第一个数字来自你数据上的CV方案。

相关内容

  • 没有找到相关文章

最新更新