使用 scikit 学习的离散分类器的 ROC 曲线
ROC curve for discrete classifier using scikit learn
我在理解 scikit 学习中的 ROC 函数如何生成真阳性率和假阳性率时,在概念上遇到了一些困难。我使用 BC scikit 学习数据并围绕 2 个随机特征构建了决策树。
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn import tree
import numpy as np
data = load_breast_cancer()
X = data.data[:, [1,3]]
y = data.target
# Splitting data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33,random_state=0)
# Training tree
bc_tree = tree.DecisionTreeClassifier(criterion="entropy").fit(X_train, y_train)
# Predictions
bc_pred = bc_tree.predict(X_test)
# Score
bc_tree.score(X_test, y_test)
# Confusion matrix
from sklearn.metrics import confusion_matrix
metrics.confusion_matrix(y_test, bc_pred) # True positive = 0.83
# ROC curve
fpr_tree, tpr_tree, thresholds_tree = metrics.roc_curve(y_test, bc_pred)
# True positive rate ROC
tpr_tree # 0.91
混淆矩阵如下所示:
[[ 55, 12]
[ 11, 110]]
根据我的计算,真阳性率为:
55/(55+11) = .83
根据scikit learn实现的ROC曲线,真阳性率为0.92。它是如何计算这个数字的,为什么我的计算不匹配?我错过了什么?
因为你在推断 confusion_matrix 错误。
从 confusion_matrix 返回的矩阵的形式为
0 TN FP
True
1 FN TP
0 1
Predicted
所以根据TPR的公式,这个值应该是110/ (110+11) = 0.9090...
我在理解 scikit 学习中的 ROC 函数如何生成真阳性率和假阳性率时,在概念上遇到了一些困难。我使用 BC scikit 学习数据并围绕 2 个随机特征构建了决策树。
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn import tree
import numpy as np
data = load_breast_cancer()
X = data.data[:, [1,3]]
y = data.target
# Splitting data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33,random_state=0)
# Training tree
bc_tree = tree.DecisionTreeClassifier(criterion="entropy").fit(X_train, y_train)
# Predictions
bc_pred = bc_tree.predict(X_test)
# Score
bc_tree.score(X_test, y_test)
# Confusion matrix
from sklearn.metrics import confusion_matrix
metrics.confusion_matrix(y_test, bc_pred) # True positive = 0.83
# ROC curve
fpr_tree, tpr_tree, thresholds_tree = metrics.roc_curve(y_test, bc_pred)
# True positive rate ROC
tpr_tree # 0.91
混淆矩阵如下所示:
[[ 55, 12]
[ 11, 110]]
根据我的计算,真阳性率为:
55/(55+11) = .83
根据scikit learn实现的ROC曲线,真阳性率为0.92。它是如何计算这个数字的,为什么我的计算不匹配?我错过了什么?
因为你在推断 confusion_matrix 错误。
从 confusion_matrix 返回的矩阵的形式为
0 TN FP
True
1 FN TP
0 1
Predicted
所以根据TPR的公式,这个值应该是110/ (110+11) = 0.9090...