分类器的不确定度估计
scikit-learn 的另一个有用之处就是分类器能给出预测的不确定度估计。我们不仅关心预测点的被分类情况,还关心这个预测的置信度,这个在医学上是很严肃的问题呢。scikit-learn 中有两个函数可以获取不确定度估计,decision_function 和 predict_proba 。
from sklearn.model_selection import train_test_split
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_circles
X, y = make_circles(noise=0.25, factor=0.5, random_state=1)
y_named = np.array(["blue", "red"])[y]
# 所有数组的划分方式都是一致的
X_train, X_test, y_train_named, y_test_named, y_train, y_test = \
train_test_split(X, y_named, y, random_state=0)
gbrt = GradientBoostingClassifier(random_state=0)
gbrt.fit(X_train, y_train_named)
1.决策函数
对于二分类问题,decision_function 返回值的形状是 (n_samples, ),为每个样本都返回一个浮点数。
print("X_test.shape:{}".format(X_test.shape))
print("Decision function shape:{}".format(
gbrt.decision_function(X_test).shape))
对于类别1来说,(25, ) 这个值表示模型对该数据点为“正”的置信度。正值表示对正类的偏好,负值表示对“反类”的偏好。
print("Decision function:\n{}".format(gbrt.decision_function(X_test)[:6]))
我们可以通过仅查看决策函数的正负号来再现预测值。
print("Thresholded decision function:\n{}".
format(gbrt.decision_function(X_test) > 0))
print("Pred