带有阈值python的混淆矩阵
Posted
技术标签:
【中文标题】带有阈值python的混淆矩阵【英文标题】:confusion matrix with threshold python 【发布时间】:2020-02-04 16:04:29 【问题描述】:如果将阈值在 [0.5,0.6,0.9] 之间更改一次 0.5 和一次 0.6 等等,如何打印逻辑回归的混淆矩阵
from sklearn.linear_model import LogisticRegression
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
X = [[0.7,0.2],[0.9,0.4]]
y = [1,-1]
model = LogisticRegression()
model = model.fit(X,y)
threshold = [0.5,0.6,0.9]
CM = confusion_matrix(y_true, y_pred)
TN = CM[0][0]
FN = CM[1][0]
TP = CM[1][1]
FP = CM[0][1]
【问题讨论】:
嗨!我不明白你的问题:门槛是什么?您没有在代码中使用变量threshold
。
请查看https://***.com/questions/32627926/scikit-changing-the-threshold-to-create-multiple-confusion-matrixes
【参考方案1】:
def predict_y_from_treshold(model,X,treshold):
return np.array(list(map(lambda x : 1 if x > treshold else 0,model.predict_proba(X)[:,1])))
【讨论】:
你能澄清一下代码的作用吗?【参考方案2】:让我们试试这个!
for i in threshold:
y_predicted = model.predict_proba(X)[:1] > i
print(confusion_matrix(y, y_predicted))
predict_proba() 返回一个包含两列的 numpy 数组。第一列是目标 = 0 的概率,第二列是目标 = 1 的概率。这就是为什么我们在 predict_proba() 之后添加 [:,1] 以获得 target=1 的概率
【讨论】:
【参考方案3】:我认为伪代码(基于 python)的一种简单方法是:
1 - 预测一组已知值 (X) y_prob = model.predict_proba(X)
,因此您将获得 X 中每个输入的概率。
2 - 然后为每个阈值计算输出。即如果 y_prob > 阈值 = 1 否则 0
3 - 现在得到每个向量的混淆矩阵。
如果您需要更深入的解释,请告诉我!
【讨论】:
我们怎样才能找到最好的阈值,然后在那个if条件中使用它:“If y_prob > threshold = 1 else 0” 嗯.. 反复试验,也取决于你在寻找什么。在检测所有阳性或检测所有阴性之间存在这种权衡(如果您说结果始终是第 1 类,您将成功找到所有第 1 类,但您将无法检测到第 -1 类)寻找 auc 作为分类器的指标。以上是关于带有阈值python的混淆矩阵的主要内容,如果未能解决你的问题,请参考以下文章
机器学习系列模型评价ROC曲线约登指数最佳阈值一个函数中实现约登指数计算并集成到ROC图中,给出默认阈值及最佳阈值下的混淆矩阵
python 一个简单的例子:带有Keras的混淆矩阵flow_from_directory.py
R语言glm拟合logistic回归模型:模型评估(模型预测概率的分组密度图混淆矩阵准确率精确度召回率ROCAUC)PRTPlot函数获取logistic模型最优阈值(改变阈值以优化)
混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集