sklearn CalibratedClassifierCV 和 SVM 出错

error with sklearn CalibratedClassifierCV and SVM

我想结合使用 sklearn 的 CalibratedClassifierCV 和 sklearn 的 SVC 来预测多类 (9 类) 预测问题。但是,当我 运行 它时,出现以下错误。同样的代码 运行 对不同的模型(即 RandomForestCalssifier)没有问题。

kf = StratifiedShuffleSplit(y, n_iter=1, test_size=0.2)
clf = svm.SVC(C=1,probability=True)            
sig_clf = CalibratedClassifierCV(clf, method="isotonic", cv=kf)
sig_clf.fit(X, y)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/g/anaconda/lib/python2.7/site-packages/sklearn/calibration.py", line 166, in fit
    calibrated_classifier.fit(X[test], y[test])
  File "/home/g/anaconda/lib/python2.7/site-packages/sklearn/calibration.py", line 309, in fit
    calibrator.fit(this_df, Y[:, k], sample_weight)
IndexError: index 9 is out of bounds for axis 1 with size 9

这是 SVC 使用一对一策略的问题,因此决策函数的形状为 (n_samples, n_classes * (n_classes - 1) / 2)。 一个可能的解决方法是 CallibratedClassifierCV(OneVsRestClassifier(SVC()))。 如果你想使用sigmoidal校准,你也可以做SVC(probability=True)而不是使用CallibratedClassifierCV

我认为我们应该修复 SVC 决策函数。