Machine learning logistic回归的精度

Machine learning logistic回归的精度,machine-learning,scikit-learn,logistic-regression,Machine Learning,Scikit Learn,Logistic Regression,下面是我发现的经过轻微修改的代码 我使用与原作者相同的逻辑,但仍然没有得到很好的准确性。平均倒数排名接近(矿井:52.79,例:48.04)< /P> 但笔记本样本(59.80)的准确性与我的代码(38.62)不匹配 示例笔记本中使用的以下功能是否正确返回精度 def compute_accuracy(eval_items:list): correct=0 total=0 for item in eval_items: true_pred=item[0]

下面是我发现的经过轻微修改的代码

我使用与原作者相同的逻辑,但仍然没有得到很好的准确性。平均倒数排名接近(矿井:52.79,例:48.04)< /P> 但笔记本样本(59.80)的准确性与我的代码(38.62)不匹配

示例笔记本中使用的以下功能是否正确返回精度

def compute_accuracy(eval_items:list):
    correct=0
    total=0

    for item in eval_items:
        true_pred=item[0]
        machine_pred=set(item[1])

        for cat in true_pred:
            if cat in machine_pred:
                correct+=1
                break


    accuracy=correct/float(len(eval_items))
    return accuracy

笔记本代码正在检查实际类别是否在模型返回的前三名中:

def get_top_k_predictions(model, X_test, k):
    probs = model.predict_proba(X_test)
    best_n = np.argsort(probs, axis=1)[:, -k:]
    preds=[[model.classes_[predicted_cat] for predicted_cat in prediction] for prediction in best_n] 
    preds=[item[::-1] for item in preds]
    return preds
如果将代码的求值部分替换为以下内容,您将看到您的模型返回的前三名精度也为0.5980:

...    

model = scikit_log_reg.fit(X_train, y_train)

top_preds = get_top_k_predictions(model, X_test, 3)
pred_pairs = list(zip([[v] for v in y_test], top_preds))
print(compute_accuracy(pred_pairs))

# below is a simpler & more Pythonic version of compute_accuracy
print(np.mean([actual in pred for actual, pred in zip(y_test, top_preds)]))

笔记本代码正在检查实际类别是否在模型返回的前三名中:

def get_top_k_predictions(model, X_test, k):
    probs = model.predict_proba(X_test)
    best_n = np.argsort(probs, axis=1)[:, -k:]
    preds=[[model.classes_[predicted_cat] for predicted_cat in prediction] for prediction in best_n] 
    preds=[item[::-1] for item in preds]
    return preds
如果将代码的求值部分替换为以下内容,您将看到您的模型返回的前三名精度也为0.5980:

...    

model = scikit_log_reg.fit(X_train, y_train)

top_preds = get_top_k_predictions(model, X_test, 3)
pred_pairs = list(zip([[v] for v in y_test], top_preds))
print(compute_accuracy(pred_pairs))

# below is a simpler & more Pythonic version of compute_accuracy
print(np.mean([actual in pred for actual, pred in zip(y_test, top_preds)]))

感谢您指出这一点:“笔记本代码正在检查实际类别是否在前3名”。这是标准做法吗?如果测试结果出现在前3中,有没有考虑使用匹配的用例?或者这只是一个教程?对于像这样的多类分类来说,这不是一个不常见的指标(例如,参见第一篇大型神经网络图像识别论文,其中他们研究了其分类器的top-1和top-5精度:)。对于二进制分类器,您更经常看到ROC曲线和精度召回等指标,因为它们提供了更丰富的视图,而不是在某个固定截止点的直线模型精度。感谢您指出这一点:“笔记本代码正在检查实际类别是否在前3位”。这是标准做法吗?如果测试结果出现在前3中,有没有考虑使用匹配的用例?或者这只是一个教程?对于像这样的多类分类来说,这不是一个不常见的指标(例如,参见第一篇大型神经网络图像识别论文,其中他们研究了其分类器的top-1和top-5精度:)。对于二进制分类器,您更经常看到ROC曲线和精度召回等指标,因为它们提供了更丰富的视图,而不是在某个固定截止点的直线模型精度。