知道我们对未知数据进行分类的置信度非常重要. 当新的数据点被分类到已知类别中时, 我们可以训练SVM以计算该输出的置信水平.

怎么做...?

  • 全部代码可以在svm_confidence.py文件中找到. 我们这里讨论核心实现方法. 先定义一些数据:
input_datapoints = np.array(
    [
        [2, 1.5],
        [8, 9],
        [4.8, 5.2],
        [4, 4],
        [2.5, 7],
        [7.6, 2],
        [5.4, 5.9]
    ]
)
  • 计算边界距离:
print ("边界距离:")
for i in input_datapoints:
    print (i, '-->', classifier.decision_function(i.reshape(1, -1))[0])
  • 输出结果如下:

  • 与边界的距离给了我们关于数据点的一些信息, 但它并不能准确地告诉我们分类器对输出标签的可信度. 为此, 我们需要Platt缩放. 这是一种将距离度量转换为类之间的概率度量的方法. 您可以查看以下教程, 了解有关Platt缩放的更多信息: http://fastml.com/classifier-calibration-with-platts-scaling-and-isotonic-regression. 让我们继续使用Platt缩放训练SVM:
# Confidence measure
params = {'kernel': 'rbf', 'probability': True}
# probability 参数告诉SVM它应该训练计算概率
classifier = SVC(**params)
  • 训练模型:
classifier.fit(X_train, y_train)
  • 让我们计算这些输入数据点的置信度测量值:
print ("\nConfidence measure:")
for i in input_datapoints:
    print (i, '-->', classifier.predict_proba(i.reshape(1, -1))[0])
  • 结果如下:

  • 让我们看看点相对于边界的位置:
utilities.plot_classifier(
    classifier,
    input_datapoints,
    [0] * len(input_datapoints),
    'Input datapoints',
    'True'
)
plt.show()
  • 结果如下:

results matching ""

    No results matching ""