在 scikit 中绘制 ROC 曲线仅产生 3 分
Plotting a ROC curve in scikit yields only 3 points
TLDR:scikit 的 roc_curve
函数仅为特定数据集返回 3 个点。
为什么会这样,我们如何控制返回多少分?
我正在尝试绘制 ROC 曲线,但始终得到 "ROC triangle"。
lr = LogisticRegression(multi_class = 'multinomial', solver = 'newton-cg')
y = data['target'].values
X = data[['feature']].values
model = lr.fit(X,y)
# get probabilities for clf
probas_ = model.predict_log_proba(X)
只是为了确保长度没问题:
print len(y)
print len(probas_[:, 1])
Returns 两者均为 13759。
然后运行:
false_pos_rate, true_pos_rate, thresholds = roc_curve(y, probas_[:, 1])
print false_pos_rate
returns [ 0. 0.28240129 1. ]
如果我调用 threasholds,我得到 array([ 0.4822225 , -0.5177775 , -0.84595197]) (总是只有 3 个点)。
因此,我的 ROC 曲线看起来像三角形也就不足为奇了。
我无法理解的是 为什么 scikit 的 roc_curve
只返回 3 个点。 非常感谢帮助。
点数取决于输入中唯一值的数量。由于输入向量只有 2 个唯一值,该函数给出正确的输出。
我在另一个例子中遇到了同样的问题。我犯的错误是输入 给定阈值 的结果,而不是 [=11= 的参数 y_score
中的 概率 ].它还给出了一个包含三个点的图,但这是一个错误!
除(0,0) 和(1,1) 外,无需获得1 分。
我正在使用来自 kaggle 的蘑菇数据集来解决二元分类问题。
从 roc_curve 购买 fpr 和 tpr,我又得到 4 分,尽管它们的价值大致相同。
fpr = {0, 0, 0.02290076, 0.0267176, 0.832061, 1}
tpr = {0, 0.0315361, 0.985758, 0.996948, 1, 1}
我不确定我们是否可以将其视为 1 个点,因为使用它绘制的曲线看起来像问题中所示的那个。
我运行遇到同样的问题,仔细阅读文档后我意识到错误在:
probas_ = model.predict_log_proba(X)
虽然,其他人通过检查唯一性指出了一些提示。应该改为:
probas_ = model.decisions(X)
TLDR:scikit 的 roc_curve
函数仅为特定数据集返回 3 个点。
为什么会这样,我们如何控制返回多少分?
我正在尝试绘制 ROC 曲线,但始终得到 "ROC triangle"。
lr = LogisticRegression(multi_class = 'multinomial', solver = 'newton-cg')
y = data['target'].values
X = data[['feature']].values
model = lr.fit(X,y)
# get probabilities for clf
probas_ = model.predict_log_proba(X)
只是为了确保长度没问题:
print len(y)
print len(probas_[:, 1])
Returns 两者均为 13759。
然后运行:
false_pos_rate, true_pos_rate, thresholds = roc_curve(y, probas_[:, 1])
print false_pos_rate
returns [ 0. 0.28240129 1. ]
如果我调用 threasholds,我得到 array([ 0.4822225 , -0.5177775 , -0.84595197]) (总是只有 3 个点)。
因此,我的 ROC 曲线看起来像三角形也就不足为奇了。
我无法理解的是 为什么 scikit 的 roc_curve
只返回 3 个点。 非常感谢帮助。
点数取决于输入中唯一值的数量。由于输入向量只有 2 个唯一值,该函数给出正确的输出。
我在另一个例子中遇到了同样的问题。我犯的错误是输入 给定阈值 的结果,而不是 [=11= 的参数 y_score
中的 概率 ].它还给出了一个包含三个点的图,但这是一个错误!
除(0,0) 和(1,1) 外,无需获得1 分。 我正在使用来自 kaggle 的蘑菇数据集来解决二元分类问题。 从 roc_curve 购买 fpr 和 tpr,我又得到 4 分,尽管它们的价值大致相同。
fpr = {0, 0, 0.02290076, 0.0267176, 0.832061, 1}
tpr = {0, 0.0315361, 0.985758, 0.996948, 1, 1}
我不确定我们是否可以将其视为 1 个点,因为使用它绘制的曲线看起来像问题中所示的那个。
我运行遇到同样的问题,仔细阅读文档后我意识到错误在:
probas_ = model.predict_log_proba(X)
虽然,其他人通过检查唯一性指出了一些提示。应该改为:
probas_ = model.decisions(X)