2015-05-05 39 views
5

TLDR:scikit的roc_curve函数仅返回某个数据集的3个点。 为什么会这样呢,我们如何控制要返回的点数?在scikit中绘制ROC曲线只会得到3分

我试图绘制ROC曲线,但始终得到一个“ROC三角形”。

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) 

只是为了确保长度都OK:

print len(y) 
print len(probas_[:, 1]) 

返回13759两个。

然后运行:

false_pos_rate, true_pos_rate, thresholds = roc_curve(y, probas_[:, 1]) 
print false_pos_rate 

返回[0 0.28240129 1]

如果我请threasholds,我得到阵列([0.4822225,-0.5177775,-0.84595197])(总是只有3分)。

因此,我的ROC曲线看起来像一个三角形就不足为奇了。

我不明白的是为什么scikit的roc_curve只返回3分。非常感谢。

enter image description here

+0

您是否检查过'probas _ [:, 1]'中的值?虽然它的长度为13759,但它可能只包含3个值... – pyan

+0

感谢您的帮助,我做了'[print pd.Series(probas _ [:,1])。unique()]',实际上只有2独一无二('[-0.84595197 -0.5177775]')被退回 –

+1

很高兴它有帮助。如果你喜欢,请接受答案。 – pyan

回答

5

点的数量取决于在输入唯一值的数量。由于输入向量只有2个唯一值,因此该函数会提供正确的输出。