在Python中绘制ROC曲线

时间:2017-04-15 22:10:14

标签: python scikit-learn roc

我正在尝试绘制仅使用数据集中的两个要素的分类器的ROC曲线。谁能告诉我如何解决下面的错误。

from sklearn.metrics import roc_curve, auc
from scipy import interp
from sklearn.cross_validation import StratifiedKFold
from sklearn.svm import SVC

X_train2 = X_train[:, [0, 1]]
X_train2
cv = StratifiedKFold(y_train, n_folds=3, random_state=1)

fig = plt.figure(figsize=(7, 5))
mean_tpr = 0.0
mean_fpr = np.linspace(0, 1, 100)
all_tpr = []

for i, (train, test) in enumerate(cv):
    probas = SVC.fit(X_train2[train], y_train[train]).predict_proba(X_train2[test])
fpr, tpr, thresholds = roc_curve(y_train[test], probas[:, 1], pos_label=1)
mean_tpr += interp(mean_fpr, fpr, tpr)
mean_tpr[0] = 0.0
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, lw=1, label='ROC fold %d (area = %0.2f)'% (i+1, roc_auc))

这是错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-163-3eea9731f8d5> in <module>()
      1 from sklearn.svm import SVC
      2 for i, (train, test) in enumerate(cv):
----> 3     probas = SVC.fit(X_train2[train], y_train[train]).predict_proba(X_train2[test])
      4 fpr, tpr, thresholds = roc_curve(y_train[test], probas[:, 1], pos_label=1)
      5 mean_tpr += interp(mean_fpr, fpr, tpr)

TypeError: unbound method fit() must be called with SVC instance as first argument (got ndarray instance instead)

新错误:进行更改后,我收到以下错误:

以下是代码:

estimator= SVC(C=10)
for i, (train, test) in enumerate(cv):
    probas = estimator.fit(X_train2[train], y_train[train]).predict_proba(X_train2[test])
fpr, tpr, thresholds = roc_curve(y_train[test], probas[:, 1], pos_label=1)
mean_tpr += interp(mean_fpr, fpr, tpr)
mean_tpr[0] = 0.0
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, lw=1, label='ROC fold %d (area = %0.2f)'% (i+1, roc_auc))

这是错误:

  

AttributeError:当probability = False时,predict_proba不可用

2 个答案:

答案 0 :(得分:2)

错误信息非常明确:&#34; fit()必须使用SVC实例作为第一个参数调用&#34;。

fit()是SVC类的一种方法。您需要先创建一个SVC类实例,然后在其上调用fit()

estimator = SVC(probability=True)
probas = estimator.fit(X_train2[train], y_train[train]).predict_proba(X_train2[test])

答案 1 :(得分:0)

首先需要实例化支持向量分类器:

svc = SVC()
probas = SVC.fit(X_train2[train], y_train[train]).predict_proba(X_train2[test])

这将创建一个default parameters的分类器。