【问题标题】:confusion matrix with threshold python带有阈值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]

【问题讨论】:

标签: python scikit-learn


【解决方案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 作为分类器的指标。
    猜你喜欢
    • 1970-01-01
    • 2020-07-16
    • 2020-09-17
    • 2020-10-01
    • 2019-05-29
    • 2022-06-15
    • 1970-01-01
    • 2015-12-14
    • 2014-10-14
    相关资源
    最近更新 更多