检查交叉验证 svm 的敏感性和特异性时出错
Posted
技术标签:
【中文标题】检查交叉验证 svm 的敏感性和特异性时出错【英文标题】:Error when checking sensitivty and specificity of a cross validated svm 【发布时间】:2016-07-18 08:40:25 【问题描述】:我一直在对一些数据 (RBF SVM) 执行 KFold 交叉验证。我有这个代码是为了检查真阳性率和假阳性率。有时此代码会引发错误。我注意到每当交叉验证中的随机改组创建一组所有一个类时都会出现错误,因为那是它停止运行的地方。例如:
sensitivity = 1.0
specificity = 0.0
[0 0 0 0 0 0 0 0] predicted
[0 0 0 0 0 0 0 0] actual
起初我认为这个错误是由于它会被零除,所以我尝试用 if 语句修复它。但它仍然给我这个错误:
IndexError Traceback (most recent call last)
<ipython-input-56-0339ebc92e19> in <module>()
10
11 tn = float(cm[0][0])/np.sum(cm[0])
---> 12 if np.sum(cm[1]) == 0:
13 tp = 0
14 else:
IndexError: index 1 is out of bounds for axis 0 with size 1
我完全不知道问题是什么或如何解决它。有问题的代码如下:
for i, (train, test) in enumerate(kf_total):
y_pred = clf.fit(val[train], y[train]).predict(val[test])
print y_pred,"predicted"
print y[test], "actual"
cm = confusion_matrix(y[test], y_pred)
tn = float(cm[0][0])/np.sum(cm[0])
if np.sum(cm[1]) == 0:
tp = 0
else:
tp = float(cm[1][1])/np.sum(cm[1])
print "sensitivity =", tp
print "specificity =", tn
【问题讨论】:
【参考方案1】:在您的情况下,预测 * 实际的维度将是 1x1,因为只有一个类可用 - 零。寻址这样的矩阵元素 1 会产生越界错误。
【讨论】:
我该如何解决这个问题?当它预测全零并且实际包含一时,它不会给出错误 实现了解决问题的方法!我已经开始使用分层 kfold,这样我就没有折叠,只有一个类if np.sum(y[test]) == 0:
例如。 Good explanation on confusion matrix in sklearn以上是关于检查交叉验证 svm 的敏感性和特异性时出错的主要内容,如果未能解决你的问题,请参考以下文章