两种不同方法在计算召回率和精度方面的结果不同

时间:2019-03-10 04:40:39

标签: python machine-learning classification grid-search precision-recall

按照下面的代码,我正在计算特定分类器的召回率和精度得分

from flask import Flask, render_template
from flask_pymongo import PyMongo

app = Flask(__name__)
app.config["MONGO_URI"] = 'mongodb+srv://example:example@cluster0-zh34t.mongodb.net/test?retryWrites=true'
mongo = PyMongo(app)


@app.route("/")
def index():
    doc = mongo.db.collection.find_one({"_id": 0})
    return doc

那么结果将是

clf = GradientBoostingClassifier(n_estimators=20)
clf.fit(X_train,y_train)
pred=clf.predict(X_test)
precision_recall_fscore_support(y_test, pred, average='micro' or, 'weighted', or, 'macro', or 'none')

但是如果我使用

进行计算
(0.8861803737814977, 0.8714028776978417, 0.8736586610015085, None)
(0.8714028776978417, 0.8714028776978417, 0.8714028776978417, None)
(0.8576684989847967, 0.883843537414966, 0.8649539913120651, None)

(array([0.95433071, 0.76100629]),
 array([0.84166667, 0.92602041]),
array([0.89446494, 0.83544304]),
array([720, 392]))

然后我将得到以下内容 table

您可以看到,平均回忆率和精确度得分与上一步中计算出的得分和准确性得分有很大不同,而相同的数据和相同的参数已应用到这两者上。我想知道是否有人可以帮助我做错了什么事

1 个答案:

答案 0 :(得分:0)

好吧,指标是根据不同的事物计算的。

precision_recall_fscore_support(y_test, pred)

显示测试数据上的指标值。

但是,当您使用GridSearchCV时,训练数据将按照定义的cv分为训练和测试,并根据该测试数据(作为训练数据的子集)计算指标。然后对指标进行平均取整。