Machine learning logistic回归的精度
下面是我发现的经过轻微修改的代码 我使用与原作者相同的逻辑,但仍然没有得到很好的准确性。平均倒数排名接近(矿井:52.79,例:48.04)< /P> 但笔记本样本(59.80)的准确性与我的代码(38.62)不匹配 示例笔记本中使用的以下功能是否正确返回精度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]
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曲线和精度召回等指标,因为它们提供了更丰富的视图,而不是在某个固定截止点的直线模型精度。